当我输入介于-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;
}
}
}
}
答案 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 numbers
和Integer.MIN_VALUE
Integer.MAX_VALUE
。
同样,当您抓住NumberFormatException
时,您也不应该声明这是从main