-1

我有问题。我收到了一项任务,为回文检查程序编写伪代码。我的问题是,虽然我在伪代码作业上获得了不错的成绩,但当我尝试用 java 编写代码以供自己启蒙时,我无法使一个能够检查intstring.

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。

任何解决此问题或什至了解更优雅的检查方式的帮助将不胜感激。

4

5 回答 5

0

这不是伪代码吧?为什么你的 for 循环后面有一个分号?

我会删除它。

这不是唯一的问题。您应该使用 reverseCountdown 作为循环检查而不是 stringLength,并且应该减少 reverseCountdown。

for(reverseCountdown = stringLength-1; reverseCountdown >= 0; reverseCountdown--)
于 2015-06-11T03:43:04.977 回答
0

您的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...");
}
于 2015-06-11T03:44:10.710 回答
0

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 也是一种方法,它具有反转字符串的内置函数,但我不确定给你分配的人是否会很高兴看到你使用内置函数。

希望这可以帮助!祝你好运!

于 2015-06-11T03:46:39.147 回答
0

我认为更好的方法是StringBuilder在 java 中使用或使用下面的方法自己实现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");
    }
}
}

这会更有效率,因为它只循环了一半的时间。

于 2015-06-11T03:54:56.133 回答
0

检查回文码

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));
    }
}
于 2015-06-11T03:57:00.210 回答