如何从输入的一组数字中获取最大值和最小值?

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.minMath.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();
    


【讨论】:

以上是关于如何从输入的一组数字中获取最大值和最小值?的主要内容,如果未能解决你的问题,请参考以下文章

计算用户在Java中输入的一系列数字的总和、算术平均值、最小值和最大值? [关闭]

如何对输入值进行排序

在while循环中从用户输入中获取最小值

python求最大值最小值代码

java输出最大值和最小值

python比较三个数绝对值大小并输出最大值?