尝试捕获,循环和失败的信息显示

时间:2014-10-07 02:13:31

标签: java loops try-catch

当我输入介于-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;
            }
       }

   }

}

3 个答案:

答案 0 :(得分:1)

您的if条件永远无法评估为true。同时将while更改为

while (x == false)

正如其他人所建议的那样,您还需要将if声明从AND更改为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
            }
       }
   }
}

答案 1 :(得分:0)

首先我做了这个

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

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

然后,如果(数字&lt; -2147483648&amp;&amp; number&gt; 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 :(得分:0)

一个数字如何小于负数且同时大于正数?

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

将其更改为||

另外,我建议您使用magic numbersInteger.MIN_VALUE

,而不是使用Integer.MAX_VALUE

同样,当您抓住NumberFormatException时,您也不应该声明这是从main

引发的