只检查第一个和最后一个字符

时间:2017-02-01 19:14:42

标签: java

我是java的新手,我正在尝试创建一个回文单词程序,以检查单词后退是否相同。

public static void isPalindromeWord(){
        Scanner input = new Scanner (System.in);
        System.out.print("Enter a word to check: ");
        String word = input.next().toLowerCase();
        String reversed = new StringBuffer(word).reverse().toString();
        int len = word.length();
        for(int x = 0; x < len ; x++){
            if(word.charAt(x) == reversed.charAt(x)){
                System.out.println("True");
            }else{
                System.out.println("False");
            }
        }

    }

请原谅我做错了什么,我今天才开始学习。

我的问题是:

  1. 使用当前输出True,例如&#34; otto&#34;这是一个回文。但它也适用于&#34; oplko&#34;这不是。所以我知道它只检查第一个和最后一个字母,但我认为使用for循环它会遍历每个字母?
  2. 有人能够善意地解释我出错的地方并建议如何解决它吗?我使用for循环的原因是因为任务要求我这样做。

4 个答案:

答案 0 :(得分:2)

您非常接近解决方案。由于你已经颠倒了字符串,你可以检查它们是否相等

new StringBuffer(word).reverse().equals(word);

编辑:添加了另一个使用循环

的解决方案

你在循环中做的事情大多是正确的。您True获得oplko是因为word.charAt(x) == reversed.charAt(x)条件失败时您没有退出循环。这可以通过

修复
public static void isPalindromeWord() {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a word to check: ");
    String word = input.next().toLowerCase();
    String reversed = new StringBuffer(word).reverse().toString();
    int len = word.length();
    for (int x = 0; x < len; x++) {
        if (word.charAt(x) != reversed.charAt(x)) {
            System.out.println("False");
            return;
        }
    }
    System.out.println("True");
}

答案 1 :(得分:1)

有很多方法可以做你想要的事情(包括Anthony C的非常优雅的答案),但这是一个让你工作的简单方法:

$mail->SetFrom('youremail@example.co.in', 'Contact');

答案 2 :(得分:1)

public static void isPalindromeWord(){
    Scanner input = new Scanner (System.in);
    System.out.print("Enter a word to check: ");
    String word = input.next();
    String reversed = input.next();

    char c[]=word.toLowerCase().toCharArray(); 
    char d[]=reversed.toLowerCase().toCharArray();

    if(word.length() != reversed.length()) System.out.print("False ");
    Arrays.sort(c);
    Arrays.sort(d);

    if(Arrays.equals(c,d)) System.out.print("True ");
    else System.out.print("False ");

}

答案 3 :(得分:0)

只是描述你有错的地方。你在循环的每一步都在控制台上写,你有什么比较结果并不重要。

    boolean isPolindrom = true;
    for(int x = 0; x < len ; x++){
        isPolindrom = (word.charAt(x) == reversed.charAt(x)); //compare chars and store result into variable
        if (!isPolindrom) { //if chars are different break a loop, because word is already not a polindrom
             break; 
        }
    }

    System.out.println(isPolindrom);  //output result

来自@AnthonyC的解决方案真的更好