我有一项任务,可以找到用户输入的最小,最大和平均数字。基本上,它们输入正整数,由空格分隔,Java滚动它们并将它们相加。我能够找到总和,平均值和最大整数,但是,我无法找到最小的整数。我认为解决这个问题的最好方法是将表示最小int的变量设置为等于表示循环外部最大int的变量。然后,在循环中,执行以下操作:
if(getInt < min)
{
min = getInt;
}
其中getInt是用户输入的值,min是最小整数值。但是,每次运行此操作时,min都会返回0。
这是我的完整代码:
import java.util.Scanner;
public class exc5
{
public static void main (String[] args)
{
System.out.println("Write a list of nonnegative integers, each seperated by a space. To signal the end of the list, write a negative integer. The negative integer will not be counted");
Scanner keyboard = new Scanner (System.in);
keyboard.useDelimiter(" |\n");
int count = 0;
int sum = 0;
int max = 0;
int min = max;
double average = 0;
boolean notNull = true;
while(notNull == true)
{
int getInt = keyboard.nextInt();
if(getInt < 0)
{
notNull = false;
}
else
{
if(getInt > max)
{
max = getInt;
}
if(getInt < min)
{
min = getInt;
}
sum += getInt;
count++;
average = (sum)/(count);
}
}
System.out.println("Sum = " + sum);
System.out.println("Average = " + average);
System.out.println("Max = " + max);
System.out.println("Minimum = " + min);
}
}
感谢任何帮助!
答案 0 :(得分:9)
您最初应将min
设为Integer.MAX_VALUE
,将max
设为Integer.MIN_VALUE
。
答案 1 :(得分:6)
您需要从较大的min
开始,而不是0
(只有负数小于0
)。试试这个:
int min = Integer.MAX_VALUE;
这是一个相当标准的模式。此外,为了“正确”,您的代码还应包括:
int max = Integer.MIN_VALUE;
然后处理整数范围的整数输入,正负。
另一种更“经典”的方法是使用对象引用,而不是原语(总是具有值),因此初始状态可以很容易地区分为{{1} }。在这种情况下,使用null
而不是Integer
值可以测试int
。如果我是大学教授标记这样的工作,我宁愿看到对象方法 - 使用基元的最小/最大值将起作用,但这有点像“技巧”。
代码看起来像这样:
null
与Integer min;
while (...) {
if (min == null || getInt < min) {
min = getInt;
}
}
相似。
答案 2 :(得分:3)
此:
int max = 0;
int min = max;
将min
初始化为零。 (毕竟,max
还没有成为最大的整数。)所以这个:
if(getInt < min)
永远不会成真。尝试更改此内容:
int min = max;
到此:
int min = Integer.MAX_VALUE; // largest possible Java `int`
答案 3 :(得分:1)
那是因为你要分配min = 0,所以很明显,除非你输入一个低于0的数字,最小值为0.你应该将min初始化为Integer.MAX_VALUE
int min = Integer.MAX_VALUE;
( 或者:
int min = 0xFFFFFFFF;
只是为了黑客攻击:P。使用第一个! :) )
答案 4 :(得分:1)
您将min
设置为零,因此(由于输入为正),所有输入都不会小于min
。
执行此操作的常规方法是将max
的初始值设置为Integer.MIN_VALUE
,将min
的初始值设置为Integer.MAX_VALUE
。
这可以确保任何输入值都会影响min
和max
中的至少一个 - 通常都是!
答案 5 :(得分:1)
用0初始化min。尝试使用Integer.MAX_VALUE初始化,即最好这样做:
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
否则,您的支票:
if(getInt < 0)
将突破循环,你永远不会超过0。
答案 6 :(得分:1)
您的计划的完全正常工作和“已清理”版本:
import java.util.Scanner;
public class exc5
{
public static void main ( String [] args )
{
Scanner keyboard = new Scanner( System.in );
int count = 0;
int sum = 0;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
double average = 0;
boolean notNull = true;
while ( notNull == true )
{
int getInt = keyboard.nextInt();
if ( getInt < 0 )
notNull = false;
else
{
if ( getInt > max )
max = getInt;
if ( getInt <= min )
min = getInt;
sum += getInt;
count++;
}
}
average = ( sum ) / ( count );
System.out.println( "Sum = " + sum );
System.out.println( "Average = " + average );
System.out.println( "Max = " + max );
System.out.println( "Minimum = " + min );
}
}
答案 7 :(得分:1)
你有min设置为0开始,所以getInt永远不会少。你应该在循环开始时设置min,这将解决你的问题。