我的程序继续错误地运行某些输入。这有什么问题?

时间:2020-02-12 06:13:59

标签: java

我的代码是这样的:

Scanner sc=new Scanner(System.in);
    System.out.println("Type in your order(ex.5 7 4 6 8 3 9 2 0 1 - SPACES REQUIRED): ");
    String input=sc.nextLine();
    String[] b=input.split(" ");
    sc.close();
    boolean isMixed=false;
     for(int i=0; i < input.length()/2; i++) {
         if(Integer.parseInt(b[i]) < Integer.parseInt(b[i+1])) { // Condition of "int input"
        isMixed=false; // What to print when the condition is true
    }
     else // When condition is false 
            isMixed=true;
            // Prints this when the above condition is true
    }
     if(isMixed=false)
        {
             System.out.println("Mixed"); 
        } else
        {
            System.out.println("Ascending"); 
        }
}

但是当我输入的是1 3 2 4 5 6 7 8 9时,它显示为Ascending。我该怎么做才能解决此错误?我应该带走,添加或更改任何东西吗?

2 个答案:

答案 0 :(得分:0)

  1. if(isMixed=false)将永远无法工作,因为您错过了==而不是=。因此,您只是将false的值分配给isMixed,并且false将永远不会执行if块。

  2. input.length()/2是一种获取数组中元素数量的聪明方法,但是在许多情况下,它会使您失败。 Occam的Razor-请改用b.length,因为它包含元素的绝对数量。

  3. 对于整个isMixed = true;区块,请这样思考:除非证明自己有罪,否则您是无辜的。没有中途。同样,如果[i]处的元素大于[i+1]处的元素,则isMixed应该变为true。不需要条件再次变为假。如果任何两个元素处于混合顺序,则整个输入将变得混合,因此您可以跳出循环。

    Scanner sc=new Scanner(System.in);
    System.out.println("Type in your order(ex.5 7 4 6 8 3 9 2 0 1 - SPACES REQUIRED): ");
    String input=sc.nextLine();
    String[] b=input.split(" ");
    sc.close();
    boolean isMixed=false;
    for(int i=0; i < b.length-1; i++)
    {
        if(Integer.parseInt(b[i]) > Integer.parseInt(b[i+1]))
        {
            isMixed = true;
            break;
        }
        // Prints this when the above condition is true
    }
    if(isMixed==true)
    {
        System.out.println("Mixed"); 
    } else
    {
        System.out.println("Ascending"); 
    }
    

    我将尽快对此进行解释,但是我建议您将其与您的错误进行比较,以找出您犯的错误。

答案 1 :(得分:-1)

如果if条件,则不需要elasticSearch。此外,您需要遍历数组的整个长度