我已经写了一些代码,这些代码读入一个单词并显示字母是按升序排列还是不按升序排列,在我的比较中忽略字母大小写。但是,在输入以下字母后,有两个错误标有'<'。
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();
}
}
}
答案 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()