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
    添加到它两次,因此它总是恰好执行一次

  • 如果(y>=2)分支完全没有必要(请参见#1)

  • 您以两种不同的方式误用了
    compareTo
    的返回值:

  • 当得到大于
    0
    的值时,表示
    s
    是“较小”字符串。该值表示
    s
    更大的字符串

  • 您正在比较它
    ==1
    ,但是并不保证它将是
    1
    ,只是如果
    s
    大于
    q
    ,如果它们相等,
    0
    ,或者如果
    s
    小于
    q
    ,它将是一个正数。正数不能是
    1

  • 在Java中,类名最初是封顶的。所以
    LesserString2
    ,而不是
    LesserString2

  • 最好对变量使用有意义的名称

  • 没有得到任何输出的原因是上面列表中的#3.2。您得到的是正值,但不是
    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方法中,结果可以是

  • 小于0,如果compareTo发现实例比参数“小”
  • 大于0,如果compareTo发现实例比参数“大”。或
  • 如果compareTo看到实例相等,则等于0
  • 所以改变

    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) {