Java 如何使用compareTo()方法按字母顺序对字符串排序?
我想弄明白这一点已经有一段时间了,但我不知道该怎么办。我必须使用compareTo()方法按字母顺序对两个不同的字符串进行排序,但是,编译器输出“可能的精度损失”,我不知道该做什么。这是代码Java 如何使用compareTo()方法按字母顺序对字符串排序?,java,methods,variable-assignment,Java,Methods,Variable Assignment,我想弄明白这一点已经有一段时间了,但我不知道该怎么办。我必须使用compareTo()方法按字母顺序对两个不同的字符串进行排序,但是,编译器输出“可能的精度损失”,我不知道该做什么。这是代码 String Word1; String Word2; char Compare; int Word1_Length = 0; int Word2_Length = 0; System.out.println("This event will requi
String Word1;
String Word2;
char Compare;
int Word1_Length = 0;
int Word2_Length = 0;
System.out.println("This event will require you to enter two words.");
System.out.println("PLEASE ENTER THE FIRST WORD");
Word1 = in.readLine();
Word1_Length = Word1.length();
System.out.println(Word1_Length);
Word1_Letter0 = Word1.charAt(0);
System.out.println(Word1_Letter0);
System.out.println("PLEASE ENTER THE SECOND WORD");
Word2 = in.readLine();
Word2_Length = Word2.length();
System.out.println(Word2_Length);
Word2_Letter0 = Word2.charAt(0);
System.out.println(Word2_Letter0);
Compare = Word1.compareTo(Word2);
System.out.println(Compare);
word1.compareTo(word2)
(更正大写字母后)返回一个int
(您可以在文档中阅读此事实,大多数IDE也会告诉您)<代码>比较被声明为字符
。不能将int
分配给char
。如果可以的话,“精确性的丧失”将是一种严重的委婉说法。一个int
是有符号的,并且compareTo()结果的符号告诉您两个字符串的顺序。char
如果您认为它是一个无符号的数字(这已经是一个误用),那么它不能包含负值。因此,您将丢失刚才查询的信息
如评论中所述,解决方案是声明compare
anint
:
int compare = word1.compareTo(word2);
(现在将声明和赋值结合起来,这通常有助于可读性。)
更高级的信息:您可以将int
转换为char
,这是一种转换,可能会导致上述精度损失。这不是你想要的,所以我就不提了。如果您感兴趣,可以搜索该术语。我无法编译您的代码。在Eclipse中,我得到了类型不匹配:无法在Compare=Word1.compareTo(Word2)行上从int转换为char代码>。这是您所询问的同一问题的不同症状。
中的是什么?什么是Word1\u字母0
?什么是Word2\u字母0
?——为什么在两个String
对象(Word1
和Word2
)上使用的结果是char
值(Compare
),当它被记录为返回int
时?仅供参考:Java命名约定是局部变量名以小写字母开头,所以它应该是Word1
,word2
,比较
,word1\u长度
等。欢迎使用堆栈溢出。如果您遵循Java命名约定,我们将更容易阅读您的代码(您希望我们这样做)。变量名应该以小写字母开头。我想这里的具体问题是Word1.compareTo(Word2)
返回一个int
,但是Compare
是一个char
。声明Compare
为int
。非常感谢您的帮助,我将更改我的命名约定(我不知道有什么地方出错,正如我在老师要求大写的注释中所提到的),我想我的问题是对该方法如何工作的普遍无知。(这很有趣。可能你的老师以前用C#或另一种习惯用大写字母的语言编码过。)哇,令人惊讶的解释