如何从输入的一组数字中获取最大值和最小值?
Posted
技术标签:
【中文标题】如何从输入的一组数字中获取最大值和最小值?【英文标题】:How do I get the max and min values from a set of numbers entered? 【发布时间】:2013-11-09 09:20:18 【问题描述】:以下是我目前所拥有的:
我不知道如何排除 0 作为最小数字。作业要求 0 作为退出编号,因此我需要在 min 字符串中显示除 0 之外的最小数字。有什么想法吗?
int min, max;
Scanner s = new Scanner(System.in);
System.out.print("Enter a Value: ");
int val = s.nextInt();
min = max = val;
while (val != 0)
System.out.print("Enter a Value: ");
val = s.nextInt();
if (val < min)
min = val;
if (val > max)
max = val;
;
System.out.println("Min: " + min);
System.out.println("Max: " + max);
【问题讨论】:
Math.min
和 Math.max
是你要找的东西
简单的有两个变量,一个叫min,一个叫max,然后检查输入的变量是小于min还是大于max。如果是,请重置变量。
他们会进入 for 还是 if。还是完全在循环之外?
请使用您的代码,实验,尝试。这就是你学习的方式。
@ Hovercraft Full Of Eels 好吧,这很有道理。我试试看,谢谢。
【参考方案1】:
您只需要像这样跟踪最大值:
int maxValue = 0;
然后,当您遍历数字时,如果 maxValue 大于 maxValue,则继续将 maxValue 设置为下一个值:
if (value > maxValue)
maxValue = value;
以相反的方向重复 minValue。
【讨论】:
最好轻推他,让他创建代码。否则你会欺骗他,让他失去一个体面的学习体验。 在这种情况下,我仍然会使用 Math.max/Math.min(“额外”作业不会打扰我),但这可能不是课程所要寻找的。span> @HovercraftFullOfEels 我认为我们对这个很安全......不要认为他会忘记这一点,不管他是怎么做到的。此外,他还必须为 minValue 编写代码。 =) 我将如何分配 minValue,我不知道分配给哪个数字。用户可以输入 99999999999999999999999999999 这可能是最小值,但我不想在我的代码中有 99999999999999999999999999999。也许 Math 类会更好用。 @user2934299 见Integer.MIN_VALUE
(或任何合适的类型)。但是请注意,最负的 (?) 浮点值(不包括无穷大)实际上是-Double.MAX_VALUE
。【参考方案2】:
这是一个可能的解决方案:
public class NumInput
public static void main(String [] args)
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
Scanner s = new Scanner(System.in);
while (true)
System.out.print("Enter a Value: ");
int val = s.nextInt();
if (val == 0)
break;
if (val < min)
min = val;
if (val > max)
max = val;
System.out.println("min: " + min);
System.out.println("max: " + max);
(不确定使用 int 还是双重思考)
【讨论】:
谢谢,现在说得通了。不敢相信我自己无法解决这个问题。一个问题,对于第一个解决方案: Integer.MAX_INT;整数.MIN_INT;这些是决赛吗?或某种java方法?对不起,如果这是一个愚蠢的问题,但我对这一切都很陌生。 @user2934299 它们是常量。它们分别代表int
可以存储的最大和最小数字。【参考方案3】:
//for excluding zero
public class SmallestInt
public static void main(String[] args)
Scanner input= new Scanner(System.in);
System.out.println("enter number");
int val=input.nextInt();
int min=val;
//String notNull;
while(input.hasNextInt()==true)
val=input.nextInt();
if(val<min)
min=val;
System.out.println("min is: "+min);
【讨论】:
【参考方案4】:这就是我所做的,它可以尝试并尝试使用它。它计算总、平均、最小值和最大值。
public static void main(String[] args)
int[] score= 56,90,89,99,59,67;
double avg;
int sum=0;
int maxValue=0;
int minValue=100;
for(int i=0;i<6;i++)
sum=sum+score[i];
if(score[i]<minValue)
minValue=score[i];
if(score[i]>maxValue)
maxValue=score[i];
avg=sum/6.0;
System.out.print("Max: "+maxValue+"," +" Min: "+minValue+","+" Avarage: "+avg+","+" Sum: "+sum);
【讨论】:
【参考方案5】:更好
public class Main
public static void main(String[] args)
System.out.print("Enter numbers: ");
Scanner input = new Scanner(System.in);
double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;
while (true)
if ( !input.hasNextDouble())
break;
Double num = input.nextDouble();
min = Math.min(min, num);
max = Math.max(max, num);
System.out.println("Max is: " + max);
System.out.println("Min is: " + min);
【讨论】:
【参考方案6】:这里你需要跳过 int 0 如下:
val = s.nextInt();
if ((val < min) && (val!=0))
min = val;
【讨论】:
【参考方案7】:System.out.print("Enter a Value: ");
val = s.nextInt();
这一行放在最后。整个代码如下:-
public static void main(String[] args)
int min, max;
Scanner s = new Scanner(System.in);
System.out.print("Enter a Value: ");
int val = s.nextInt();
min = max = val;
while (val != 0)
if (val < min)
min = val;
if (val > max)
max = val;
System.out.print("Enter a Value: ");
val = s.nextInt();
System.out.println("Min: " + min);
System.out.println("Max: " + max);
【讨论】:
【参考方案8】:我尝试通过处理用户输入异常来优化解决方案。
public class Solution
private static Integer TERMINATION_VALUE = 0;
public static void main(String[] args)
Integer value = null;
Integer minimum = Integer.MAX_VALUE;
Integer maximum = Integer.MIN_VALUE;
Scanner scanner = new Scanner(System.in);
while (value != TERMINATION_VALUE)
Boolean inputValid = Boolean.TRUE;
try
System.out.print("Enter a value: ");
value = scanner.nextInt();
catch (InputMismatchException e)
System.out.println("Value must be greater or equal to " + Integer.MIN_VALUE + " and less or equals to " + Integer.MAX_VALUE );
inputValid = Boolean.FALSE;
scanner.next();
if(Boolean.TRUE.equals(inputValid))
minimum = Math.min(minimum, value);
maximum = Math.max(maximum, value);
if(TERMINATION_VALUE.equals(minimum) || TERMINATION_VALUE.equals(maximum))
System.out.println("There is not any valid input.");
else
System.out.println("Minimum: " + minimum);
System.out.println("Maximum: " + maximum);
scanner.close();
【讨论】:
以上是关于如何从输入的一组数字中获取最大值和最小值?的主要内容,如果未能解决你的问题,请参考以下文章