我编写了一些代码,它读取一个单词并显示字母是否按升序排列,在比较中忽略字母大小写。但是输入以下字母后,出现两个错误,并用“<”标记。
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/