为什么我的循环在没有输入的情况下进入else条件?

时间:2016-11-23 10:27:09

标签: java loops try-catch java.util.scanner do-while

晚上好,

我不知道为什么这个循环根本不起作用。它破坏了我的整个申请。下面是代码:

    System.out.println("Please tell me what to count till?");
    do  
    {
        try
        {
            newEndingValue= input.nextInt();
            if(newEndingValue >= 0 || newEndingValue <= 0) 
            {
               break; //breaks the loop
            }
        }
        catch (InputMismatchException e) 
        {
            System.out.println("My Apologies, but COMMAND NOT RECOGNIZED!" + "\nPlease tell me what to count till?");
            input.next();       

        }           
    }   
    while(!input.hasNextInt()); 

    v.setEndingValue(newEndingValue);


System.out.println("Please tell me what to count from?");
if(increasingOrDecreasing.equalsIgnoreCase("Increasing")|| increasingOrDecreasing.equals("++") || increasingOrDecreasing.equals("+"))
    {
    do  
    {
      try 
      {
            newInitialValue = input.nextInt();
            if(newInitialValue < v.getEndingValue()) 
                {
                 break; 
                }
            else{ 
                System.out.println("My Apologies, but starting point value must be smaller than ending point value!" + "\nPlease tell me what to count from?"); 
                newInitialValue = (v.getEndingValue()+10);//overrides the value to something that forces the loop back
                }
        }
        catch (InputMismatchException e) 
            {
            System.out.println("My Apologies, but COMMAND NOT RECOGNIZED!" + "\nPlease tell me what to count from?"); 
            input.next();       
            }           
     }  
    while(!input.hasNextInt() || newInitialValue > v.getEndingValue());
     }
else
{
    do 
    {
    try 
        {
        newInitialValue = input.nextInt();
        if(newInitialValue > v.getEndingValue()) 
            {
             break; //breaks the loop
            }
        else{ 
            System.out.println("My Apologies, but starting point value must be larger than ending point value!" + "\nPlease tell me what to count from?"); 
            newInitialValue = (v.getEndingValue()-10);//overrides the value something that forces the loop back
            }
        }
    catch (InputMismatchException e)
        {
        System.out.println("My Apologies, but COMMAND NOT RECOGNIZED!" + "\nPlease tell me what to count from?"); 
        input.next(); //consumes the erroneously typed string value 
        newInitialValue = (v.getEndingValue()-10);
        }           
    }   
    while(!input.hasNextInt() || newInitialValue < v.getEndingValue());
    }

所以当输入no时输出,然后输入1000如下:

请告诉我要算什么?

没有

我很抱歉,但命令不被认可!

请告诉我要算什么?

1000

请告诉我从中算些什么?

我的道歉,但起点值必须小于终点值!

请告诉我从中算些什么?

为什么直接进入第二个写的其他声明? 为什么要跳过newInitialValue的用户条目? 请注意,如果在输入newEndingValue的字符串后,在结束值块之后编辑代码,然后正确输入一个数字,这会解决我的错误,但如果再次运行并且用户合作则生成另一个:

...
newInitialValue = input.nextInt(); //essentially gets skipped over by compiler only when previous catch statement is triggered
System.out.println("Please tell me what to count from?");
if(increasingOrDecreasing.equalsIgnoreCase("Increasing")|| increasingOrDecreasing.equals("++") || increasingOrDecreasing.equals("+"))
{...

另外,因为它的打印输出&#34;但起点值必须小于终点值&#34;我们可以推断它分别使用if(increment ...)循环和do和try循环。但它跳过了(newI ... = input ...)和if(newIntia ...)代码行。我知道这个原因甚至手动输入newInitialValue = 2(在参数中)它仍然转到这个else子句。

2 个答案:

答案 0 :(得分:0)

-_-所以问题在while语句中:

while(!input.hasNextint())

这向前看并检查下一个用户输入,但由于捕获消耗了一个它看起来到下一个下一个并且它变得模糊...基本上如果我不使用它它起作用。 相反,我用过:

while(isError == true)

并在带有嵌套if语句的do循环下,我有:

if(blah blah blah){
isError=false;
break;

在下一个循环块之前,我只是覆盖了isError

isError=true;
//next block of code

答案 1 :(得分:-1)

这里的问题是,如果值1为真或者value2为true或者value3为true,那么你说java做了一些事情,然后如果使用或者你在其他地方做同样的事情你就说了。你必须明白你需要使用和&amp;&amp;为了帮助java了解else参数。