JAVA:我认为反转字符串以逐一检查回文串时出错
JAVA: Error reversing a string to check for palaindrome off-by-one i think
我有问题。我收到了为回文检查程序编写伪代码的任务。我的问题是,虽然我的伪代码作业得到了很好的分数,但当我试图在 java 中编写代码以供自己启迪时,我无法编写出能够检查 int
和 [=13] 的代码=].
import java.util.Scanner;
public class palindromeCheck {
private static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
String forward;
String reverse = "";
int reverseCountdown;
System.out.println("enter a string and I will tell you if its a palindrome");
forward= in.next();
int stringLength= forward.length();
for(reverseCountdown = stringLength-1; stringLength>-1; stringLength--);
reverse=reverse+forward.charAt(reverseCountdown);
if(forward.equals(reverse))
System.out.println("Bro you got a palindrome!");
else
System.out.println("Thats not a palindrome...");
}
}
现在我的问题是,就我可怜的技能而言,在我的 for
循环中,我正在将字符值一个一个地转录成一个字符串,但是,我不能来想出一个包含所有字符的代码解决方案;似乎只剩下一个。 (或者也许我的错误是其他原因。)但这就是我的样子,因为代码将 运行,但我从来没有得到回文的响应(即使对于像 222 这样明显的东西),除了单字符项,例如 0 或 1。
任何解决此问题的帮助,甚至了解更优雅的检查方法,我们将不胜感激。
这不是伪代码吧?为什么你的 for 循环后面有一个分号?
我会删除它。
这不是唯一的问题。您应该使用 reverseCountdown 作为循环检查而不是 stringLength,并且您应该递减 reverseCountdown。
for(reverseCountdown = stringLength-1; reverseCountdown >= 0; reverseCountdown--)
您的 for
循环由分号终止。
for(reverseCountdown = stringLength-1; stringLength>-1; stringLength--);
reverse=reverse+forward.charAt(reverseCountdown);
我相信你想要(并且你需要测试和修改reverseCountdown
)像
for(reverseCountdown = stringLength-1; reverseCountdown>-1; reverseCountdown--) {
reverse=reverse+forward.charAt(reverseCountdown);
}
我个人更喜欢StringBuilder
(因为它有一个reverse
方法)比如
System.out.println("enter a string and I will tell you if "
+ "it's a palindrome");
String forward = in.next();
StringBuilder sb = new StringBuilder(forward);
sb.reverse();
if (sb.toString().equals(forward)) {
System.out.println("Bro you got a palindrome!");
} else {
System.out.println("Thats not a palindrome...");
}
for 循环应该是这样的
for (reverseCountdown = stringLength-1; reverseCountdown >=0; reverseCountdown--){ //have changed the loop variables here
reverse += forward.charAt(reverseCountdown);
}
for 循环末尾的 ;
导致 for 循环在空语句上变为 运行(仅 ; 被视为空语句)。删除它并稍微改变你的 for 循环,
你的 for 循环的问题是,你应该在任何地方都使用变量 'reverseCountdown',但你做的 StringLength--
并不顺利。
使用 StringBuilder 也是一种方法,它有内置函数来反转字符串,但我不确定给你作业的人是否会很高兴看到你使用内置函数。
希望这对您有所帮助!
祝你好运!
我认为更好的方法是在 java 中使用 StringBuilder
或使用 array
自己实现,如下所示。
import java.util.Scanner;
public class PalindromeCheck {
private static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
System.out.println("enter a string and I will tell you if its a palindrome");
char[] arr = in.next().toCharArray();
boolean bool = true;
for(int i=0;i<Math.floor(arr.length/2);i++){
if(arr[i] != arr[arr.length-1-i]){
System.out.println("Not a palindrome");
bool = false;
break;
}
}
if(bool){
System.out.println("You got a palindrome");
}
}
}
这样会更有效率,因为它只循环了一半的时间。
检查回文码
public class PalindromeCheck {
public static boolean check(String str) {
boolean flag = true;
char[] chs = str.toCharArray();
int len = chs.length;
for(int i = 0; i < len/2; i++) {
if(chs[i] != chs[len - i -1]) {
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) {
String str0 = "123321";
String str1 = "1234321";
String str2 = "123421";
System.out.println(check(str0));
System.out.println(check(str1));
System.out.println(check(str2));
}
}
我有问题。我收到了为回文检查程序编写伪代码的任务。我的问题是,虽然我的伪代码作业得到了很好的分数,但当我试图在 java 中编写代码以供自己启迪时,我无法编写出能够检查 int
和 [=13] 的代码=].
import java.util.Scanner;
public class palindromeCheck {
private static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
String forward;
String reverse = "";
int reverseCountdown;
System.out.println("enter a string and I will tell you if its a palindrome");
forward= in.next();
int stringLength= forward.length();
for(reverseCountdown = stringLength-1; stringLength>-1; stringLength--);
reverse=reverse+forward.charAt(reverseCountdown);
if(forward.equals(reverse))
System.out.println("Bro you got a palindrome!");
else
System.out.println("Thats not a palindrome...");
}
}
现在我的问题是,就我可怜的技能而言,在我的 for
循环中,我正在将字符值一个一个地转录成一个字符串,但是,我不能来想出一个包含所有字符的代码解决方案;似乎只剩下一个。 (或者也许我的错误是其他原因。)但这就是我的样子,因为代码将 运行,但我从来没有得到回文的响应(即使对于像 222 这样明显的东西),除了单字符项,例如 0 或 1。
任何解决此问题的帮助,甚至了解更优雅的检查方法,我们将不胜感激。
这不是伪代码吧?为什么你的 for 循环后面有一个分号?
我会删除它。
这不是唯一的问题。您应该使用 reverseCountdown 作为循环检查而不是 stringLength,并且您应该递减 reverseCountdown。
for(reverseCountdown = stringLength-1; reverseCountdown >= 0; reverseCountdown--)
您的 for
循环由分号终止。
for(reverseCountdown = stringLength-1; stringLength>-1; stringLength--);
reverse=reverse+forward.charAt(reverseCountdown);
我相信你想要(并且你需要测试和修改reverseCountdown
)像
for(reverseCountdown = stringLength-1; reverseCountdown>-1; reverseCountdown--) {
reverse=reverse+forward.charAt(reverseCountdown);
}
我个人更喜欢StringBuilder
(因为它有一个reverse
方法)比如
System.out.println("enter a string and I will tell you if "
+ "it's a palindrome");
String forward = in.next();
StringBuilder sb = new StringBuilder(forward);
sb.reverse();
if (sb.toString().equals(forward)) {
System.out.println("Bro you got a palindrome!");
} else {
System.out.println("Thats not a palindrome...");
}
for 循环应该是这样的
for (reverseCountdown = stringLength-1; reverseCountdown >=0; reverseCountdown--){ //have changed the loop variables here
reverse += forward.charAt(reverseCountdown);
}
for 循环末尾的 ;
导致 for 循环在空语句上变为 运行(仅 ; 被视为空语句)。删除它并稍微改变你的 for 循环,
你的 for 循环的问题是,你应该在任何地方都使用变量 'reverseCountdown',但你做的 StringLength--
并不顺利。
使用 StringBuilder 也是一种方法,它有内置函数来反转字符串,但我不确定给你作业的人是否会很高兴看到你使用内置函数。
希望这对您有所帮助! 祝你好运!
我认为更好的方法是在 java 中使用 StringBuilder
或使用 array
自己实现,如下所示。
import java.util.Scanner;
public class PalindromeCheck {
private static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
System.out.println("enter a string and I will tell you if its a palindrome");
char[] arr = in.next().toCharArray();
boolean bool = true;
for(int i=0;i<Math.floor(arr.length/2);i++){
if(arr[i] != arr[arr.length-1-i]){
System.out.println("Not a palindrome");
bool = false;
break;
}
}
if(bool){
System.out.println("You got a palindrome");
}
}
}
这样会更有效率,因为它只循环了一半的时间。
检查回文码
public class PalindromeCheck {
public static boolean check(String str) {
boolean flag = true;
char[] chs = str.toCharArray();
int len = chs.length;
for(int i = 0; i < len/2; i++) {
if(chs[i] != chs[len - i -1]) {
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) {
String str0 = "123321";
String str1 = "1234321";
String str2 = "123421";
System.out.println(check(str0));
System.out.println(check(str1));
System.out.println(check(str2));
}
}