破碎的逻辑? - 字母的升序和降序

时间:2018-01-01 02:30:35

标签: java

我已经写了一些代码,这些代码读入一个单词并显示字母是按升序排列还是不按升序排列,在我的比较中忽略字母大小写。但是,在输入以下字母后,有两个错误标有'<'。

abcdefgh   letters in ascending order 
Xabcdefg   letters in ascending order       <<<<<<<<<<
aXbcdefg   letters not in ascending order 
abXcdefg   letters not in ascending order 
abcXdefg   letters not in ascending order 
abcdXefg   letters not in ascending order 
abcdeXfg   letters not in ascending order 
abcdefXg   letters not in ascending order 
abcdefgX   letters not in ascending order  <<<<<<<<<<
ABCDEFGH   letters in ascending order 

&#34; Xabcdefg&#34;显然不是按升序排列和#34; abcdefgX&#34;相反,为什么我的代码输出这两个特定行的错误信息。请任何人都可以查看下面的代码并帮我解决这个问题。我正在使用BlueJ进行编码,并且从头开始学习Java需要4个月,所以我可能需要一手掌握这个以及任何答案的解释。谢谢。

 public class Main
 {
  public static void main(String[] args)
  {
    String word = BIO.getString();
    while (!word.equals( "END" ) )
      {
        boolean inorder = false;
        // Convert the above string to a char array.
        char[] arr = word.toCharArray();
        for (int i=0; i<arr.length-1; i++)
        { //Check pair
            if ( arr[i] > arr[i+1] ) 
            { 

                System.out.printf("%-10s letters not in ascending order ", word);
                inorder = true;

            }
        }
        if ( ! inorder )
        { 
            System.out.printf("%-10s letters in ascending order ", word);

        }
        word = BIO.getString();
    }
  }
}

2 个答案:

答案 0 :(得分:2)

你声称你对角色进行了不区分大小写的比较,但事实上你并没有。尝试在循环中进行真正的不区分大小写的比较,代码应该产生预期的输出:

String word = BIO.getString();
while (!word.equals( "END" )) {
    char[] arr = word.toCharArray();
    inorder = true;
    for (int i=0; i < arr.length-1; i++) {
        char a = Character.toLowerCase(arr[i]);       // convert both characters
        char b = Character.toLowerCase(arr[i+1]);     // to lowercase
        if (a > b) {
            inorder = false;
            break;
        }
    }

    if (inorder) {
        System.out.printf("%-10s letters in ascending order ", word);
    }
    else {
        System.out.printf("%-10s letters not in ascending order ", word);
    }
    word = BIO.getString();
}

顺便说一下,原因如下:

Xabcdefg

似乎顺序是技术上它 依次是ASCII字符的顺序。大写字母出现在小写字母之前的ASCII表中,因此X甚至在小写a之前出现。但是通过将所有内容都设为小写,我们可以消除这个问题。

答案 1 :(得分:0)

Java是一种区分大小写的语言。

X是大写字母,位于小写字母之前。

更改&gt;线

arr[i] > arr[i+1]

arr[i].toUpperCase() > arr[i+1].toUpperCase()