2014-10-07 98 views
0

当我输入介于-2147483648和2147483647之间的值时,程序关闭并且不显示像我写的那样的有效数字。如果我在范围之外输入一个数字,它应该输入一个while循环,直到我输入范围之间的有效数字。然而,当我在范围之外输入一个数字时,它只是显示一个异常错误,这就是为什么我把第一名放在那里的原因。尝试捕获,循环并显示信息失败

我已经尝试过这个问题几个小时了,我还是比较新的编码(第二类),所以我很抱歉,如果这已被回答以前。我查了很多旧的答案,并试图用它作为我的代码的模型。然而,这是我得到的。

import javax.swing.JOptionPane; 

public class test 
{ 
    public static void main (String[] args) throws NumberFormatException 
    { 
     String input; 
     boolean x; 
     int number; 

     while (x = false) 
     { 
      try 
      { 
       input = JOptionPane.showInputDialog("Enter an integer: ");  //creates input box for user to enter integer value 
       number = Integer.parseInt(input); 

       if (number < -2147483648 && number > 2147483647) 

        x = false; 

       else 
       { 
        x = true; 
        System.out.println("You entered: " + number); 
       } 

       break; 
      } 

      catch (NumberFormatException e) 
      { 
       continue; 
      } 
     } 

    } 

} 
+2

'='和'=='有什么区别? – 2014-10-07 02:14:51

+0

它应该只是(!x)... – StackFlowed 2014-10-07 02:15:48

+0

布尔x;尚未初始化?!! – 2014-10-07 02:22:57

回答

1

if条件不能计算为true。随着改变while

while (x == false) 

如其他人所说,你还需要从ANDif声明更改为OR

if (number < -2147483648 || number > 2147483647) 

而且,你不需要break声明之后else块。由于您将x设置为true,因此无论如何您都会跳出循环。你现在拥有它的方式,在第一次迭代中你已经摆脱了循环。

此外,您应该将boolean x初始化为false。在顶部,你应该有:

boolean x = false;,你必须boolean x;

所以,当所有的都说过和做过:

import javax.swing.JOptionPane; 

public class test 
{ 
    public static void main (String[] args) throws NumberFormatException 
    { 
     String input; 
     boolean x = false; 
     int number; 

     while (x == false) 
     { 
      try 
      { 
       input = JOptionPane.showInputDialog("Enter an integer: ");  //creates input box for user to enter integer value 
       number = Integer.parseInt(input); 

       if (number < -2147483648 || number > 2147483647) 
       { 
        x = false; 
       } 
       else 
       { 
        x = true; 
        System.out.println("You entered: " + number); 
       } 
      } 
      catch (NumberFormatException e) 
      { 
       continue; 
      } 
     } 
    } 
} 

并进一步清除它。 parseInt数字超出所需范围时会引发异常,我们将进入catch块。所以你真正需要的是:

import javax.swing.JOptionPane; 

public class test 
{ 
    public static void main (String[] args) throws NumberFormatException 
    { 
     String input; 
     int number; 

     while (true) 
     { 
      try 
      { 
       input = JOptionPane.showInputDialog("Enter an integer: ");  //creates input box for user to enter integer value 
       number = Integer.parseInt(input); 

       System.out.println("You entered: " + number); 
       break; 
      } 
      catch (NumberFormatException e) 
      { 
       // do nothing 
      } 
     } 
    } 
} 
+0

默认情况下,如果未初始化,布尔值为false。 – StackFlowed 2014-10-07 02:27:43

+0

是的,但对于初学者来说,明确而非隐含要好得多。 – dursk 2014-10-07 02:28:35

+0

是的,但这不是问题,它可以作为良好实践的建议。你也不需要在每次只能在否定条件下设置true时设置false ...请检查编辑是否正确否定! – StackFlowed 2014-10-07 02:29:02

0

首先,我做这

while (x = false) => 
while (x == false) 

然后Eclipse的提醒,该boolean x未初始化。正如其他人指出的那样,您可以使用其他方式,如while(!x),但这是失败的原因。

然后,如果(数字< -2147483648 & & number> 2147483647)将始终为假,因为它是int并且比较反转。

这里是修复后的完整代码:

import javax.swing.JOptionPane; 

public class MyTextPanel 
{ 
    public static void main (String[] args) throws NumberFormatException 
    { 
     String input; 
     long number; 

     while (true) { 
      try { 
       input = JOptionPane.showInputDialog("Enter an integer: ");  //creates input box for user to enter integer value 
       number = Long.parseLong(input); 

       if (number < -2147483648 || number > 2147483647) 
        continue; 

       else { 
        System.out.println("You entered: " + number); 
        break; 
       } 
      } catch (NumberFormatException e) { 
       continue; 
      } 
     } 
    } 
} 
+2

它应该只是(!x)不需要== ... – StackFlowed 2014-10-07 02:15:16

+0

这是一个问题,但它没有以我想要的方式编译我的代码。 println仍然不可见,并且循环外部的数字仍然不会进入循环,因为它们应该是 – 2014-10-07 02:17:58

+0

@wrongAnswer,您是正确的。 – Splash 2014-10-07 02:18:20

0

一个数字如何可以小于一个负数,同时大于一个正数呢?

if (number < -2147483648 && number > 2147483647) 

将其更改为||

而且我建议,而不是使用magic numbers,使用Integer.MIN_VALUEInteger.MAX_VALUE

而且当你正赶上NumberFormatException你不应该也宣布本作从main被抛出

+0

i <10 && i> 1是一个有效的条件!即时通讯并不是说他的病情是有效的,但是这应该是答案:“一个数字如何少于某个东西,同时又多于某个东西?” – StackFlowed 2014-10-07 02:25:27

相关问题