java - 逻辑困惑? - 字母的升序和降序

标签 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 

“Xabcdefg”显然不是按升序排列的,而“abcdefgX”则相反,那么为什么我的代码会为这两个特定行输出错误信息。请任何人查看下面的代码并帮助我解决这个问题。我正在使用 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();
    }
  }
}

最佳答案

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

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 之前。但通过将所有内容都变成小写,我们就消除了这个问题。

关于java - 逻辑困惑? - 字母的升序和降序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046839/

相关文章:

java - 面试题: Check if one string is a rotation of other string

Java Pong 游戏从桨中弹起球

java - HttpURLConnection源码getHeaderField总是返回null?

Java Sax 解析器 - 在 EndElementListener 中停止处理

java - 使用 NetBeans 自动填充 jTextField

Java TreeSet 比较器

java - JUNG API中最短路径算法的性能

java - 如何在spring-boot中从application.properties创建配置类?

java - 是什么?在 "format(List<? extends NameValuePair>"中表示

java - 如何将用户定义的对象添加到 LinkedList?