我试图创建一个程序来获取用户输入的数字的最大值和最小值。
以下是代码:
Scanner in = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int value;
boolean isInt;
System.out.print("Enter an integer: ");
isInt = in.hasNextInt();
if (isInt == true){
value = in.nextInt();
}
for (int i = 0; isInt == true; i = i){
System.out.print("Enter an integer: ");
isInt = in.hasNextInt();
if (isInt == true){
value = in.nextInt();
}
}
System.out.println(min);
System.out.println(max);
输出结果为:
2147483647个
-2147483648
代码中的错误是什么?
答案 0 :(得分:4)
Min和Max of integer的定义不是从输入中获取Min和MAX。
它们是恒定的值。
MAX_VALUE 保持int的最大值的常量可以是2 31 -1。
MIN_VALUE 保持int的最小值的常量可以是-2 31 。
答案 1 :(得分:2)
初始化后,您永远不会在任何地方更改override func controlTextDidChange(_ obj: Notification) { run some code here }
或max
。
答案 2 :(得分:2)
第一件事:你拥有的不是伪代码。这只是糟糕的实际代码。
要回答您的直接问题,您需要将min
和max
的值设置为初始值以外的值。他们不会神奇地更新自己。
您正在做的其他一些事情可能应该修复:
isInt
为boolean
,您无需将其与true
进行比较即可获得boolean
值:if(isInt)
没问题。nextInt()
上致电Scanner
时,您都会使hasNextInt()
的上一个结果无效。换句话说,一旦你得到下一个int,你就不知道在你再次调用hasNextInt()
之前输入中会有另一个。你的for
循环就是这个假设。这是一个代码版本,它不仅修复了上面提到的三个问题,而且还正确地缩进了:
Scanner in = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int value;
System.out.print("Enter an integer: ");
while(in.hasNextInt())
{
System.out.print("Enter an integer: ");
value = in.nextInt();
if(value < min)
{
min = value;
}
if(value > max)
{
max = value;
}
}
System.out.println(min);
System.out.println(max);
请注意,在将else
与当前value
和min
进行比较时,我不会使用max
子句。这将确保min
和max
正确设置为第一个输入,即使序列中只有一个数字。
答案 3 :(得分:1)
您的代码中没有任何地方可以更改max或min的值。如果要打印输入数字的最小值和最大值,可以进行最大值和最小值的比较。最简单的方法如下所示,在输入整数值后插入:
if(value > max)
max = value;
if(value < min)
min = value;
您应该删除这些行,并且不再需要它们:
System.out.print("Enter an integer: ");
isInt = in.hasNextInt();
if (isInt == true)
{
value = in.nextInt();
}
此外,isInt和value都必须初始化为一个值。