Java 尝试从标准输入打印较小的字符串,得到混合输出
为什么第二次不起作用?我怎样才能让它每次都起作用?我试过的第二个没有输出任何东西。。。这只是一个空行。两个主要问题是,您使用的是Java 尝试从标准输入打印较小的字符串,得到混合输出,java,Java,为什么第二次不起作用?我怎样才能让它每次都起作用?我试过的第二个没有输出任何东西。。。这只是一个空行。两个主要问题是,您使用的是result==1,而您需要使用result>0(compareTo的正值可能不是1;更多在下面的第3.2项中),并且您将比较向后,因此实际上显示的是“更大”两个字符串,而不是较小的字符串(第3.1项) 但该代码还有很多其他问题,下面是一个列表: while(y=2)分支完全没有必要(请参见#1) 您以两种不同的方式误用了compareTo的返回值: 当得到大于0的值时
result==1
,而您需要使用result>0
(compareTo
的正值可能不是1
;更多在下面的第3.2项中),并且您将比较向后,因此实际上显示的是“更大”两个字符串,而不是较小的字符串(第3.1项)
但该代码还有很多其他问题,下面是一个列表:
while(y<2)
循环是完全不必要的:y
从0
开始,您将1
添加到它两次,因此它总是恰好执行一次compareTo
的返回值:
0
的值时,表示s
是“较小”字符串。该值表示s
是更大的字符串==1
,但是并不保证它将是1
,只是如果s
大于q
,如果它们相等,0
,或者如果s
小于q
,它将是一个正数。正数不能是1
LesserString2
,而不是LesserString2
1
以下是解决上述问题的版本:
C:\Users\...>java lesserString2
how does the cat jump
very quickly i think
Lesser is: very quickly i think
C:\Users\...>java lesserString2
Jack Sprat can eat no fat
His wife can eat no lean
import java.util.Scanner;
公共类LesserString2{
公共静态void main(字符串参数[]){
扫描仪输入扫描仪=新扫描仪(System.in);
int结果;
字符串第一个字符串;
字符串第二个字符串;
firstString=inputScanner.nextLine();
secondString=inputScanner.nextLine();
结果=第一个字符串。比较到(第二个字符串);
如果(结果==0){
System.out.println(“字符串相等,请重试”);
}否则如果(结果<0){
System.out.println(“较小的是:“+firstString”);
}else{//不需要:if(结果>0){
System.out.println(“较小的是:“+secondString”);
}
}
}
问题在于您的状况。
您需要将
if(result==1)
更改为if(result>0)
这是返回值的文档。它不仅返回-0,0,1
如果参数字符串等于此字符串,则值为0;如果此字符串在字典上小于字符串参数,则值小于0;如果此字符串在字典上大于字符串参数,则值大于0
如果要打印结果,您会注意到结果的值为2
您需要将此else if(result==1)
部分更改为else if(result>0)
编辑:您还需要交换较小值的打印,因为您总是将字典中较高的值写入较小值。在compareTo方法中,结果可以是
import java.util.Scanner;
public class LesserString2 {
public static void main(String args[]) {
Scanner inputScanner = new Scanner(System.in);
int result;
String firstString;
String secondString;
firstString = inputScanner.nextLine();
secondString = inputScanner.nextLine();
result = firstString.compareTo(secondString);
if (result == 0) {
System.out.println("The strings are equal, please try again.");
} else if (result < 0) {
System.out.println("Lesser is: " + firstString);
} else { // No need for: if (result > 0) {
System.out.println("Lesser is: " + secondString);
}
}
}
到
作为一个侧节点,我可以问一下while循环用于什么吗?@KevinEsche我只希望程序读取两个句子,因此每次读取时,它都会将一行1添加到y中。所以当y等于2时,它将结束循环并比较它们。@T.J.Crowder第二行没有输出,它只输出一个空行。@pabloescobrah:啊,好的,这就是问题#3.2在我回答的问题列表中。@KevinEsche:谢谢。我换了操作符。你可能必须点击刷新,我忘记了,发布了,并在五秒钟内修复了它。但是。。。
import java.util.Scanner;
public class LesserString2 {
public static void main(String args[]) {
Scanner inputScanner = new Scanner(System.in);
int result;
String firstString;
String secondString;
firstString = inputScanner.nextLine();
secondString = inputScanner.nextLine();
result = firstString.compareTo(secondString);
if (result == 0) {
System.out.println("The strings are equal, please try again.");
} else if (result < 0) {
System.out.println("Lesser is: " + firstString);
} else { // No need for: if (result > 0) {
System.out.println("Lesser is: " + secondString);
}
}
}
} else if(result == 1) {
} else if(result > 0) {