【问题标题】:How do I find the largest number and the smallest number from the user input? (while loop)如何从用户输入中找到最大数字和最小数字? (while循环)
【发布时间】:2016-06-13 05:36:19
【问题描述】:

不知道从哪里开始说实话,我能够使用用户的输入找到平均值,但似乎无法从输入的数字中找出最大的数字或最小的数字。有没有我可以使用的方法?任何帮助都会很棒。谢谢。

编辑:有点想通了。然而,答案似乎总是最大数 = 2.1478... 或最小数 = -2.1478...

Scanner input = new Scanner(System.in);


System.out.println("Enter the number of grades: ");
double random = input.nextDouble();
double min = Integer.MIN_VALUE;
double max = Integer.MAX_VALUE;

double total=0;
int count = 1;
while (count < random+1) {




    System.out.println("Enter grade " + count + ":");

    double somenumber = input.nextDouble();
    total+=somenumber;

    count++;

    if (somenumber > max){
        max = somenumber;
    }
if (somenumber < min){
    min = somenumber;
}


}
System.out.println("Total is " + total);
System.out.println("Average is " + (total/random));
System.out.println("Largest number is " + max);
System.out.println("Smallest number is" + min);



        }

}

【问题讨论】:

  • 只有 2 个变量作为最小值和最大值,并在每次获得输入数字时跟踪这些变量。
  • 这些变量会在循环之外吗?

标签: java while-loop max min


【解决方案1】:

你想要一些看起来像的代码

double min = Double.MAX_VALUE;
double max = 0.00;  // assume use positive numbers

while (count < random+1) {

System.out.println("Enter grade " + count + ":");

double somenumber = input.nextDouble();
total+=somenumber;

count++;

max = Math.max (somenumber, max);
min = Math.min (somenumber, min);

}

【讨论】:

  • 您应该使用Double.POSITIVE_INFINITY 和Double.NEGATIVE_INFINITY。这适用于任何输入 - 如果输入为 0,您的代码已经失败
  • @MartinS 关于输入是否为零的好点。我认为成绩不应该是负数,所以 max = 0.00; 的开头很好。
  • @MartinS MAX_VALUE = 一个保持双精度类型的最大正有限值的常数 - 应该足够大来获得一个等级。
  • 是的,但是当我建议使用负无穷大时,当另一个是正无穷大时看起来更好^^但是是的最大值完全没问题
【解决方案2】:

EDIT 更新为使用Double,现在使用您原来的循环条件。

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        double smallest = Double.POSITIVE_INFINITY; //Initialize to largest int possible
        double largest = Double.NEGATIVE_INFINITY; //Initialize to smallest int possible
        System.out.println("Enter the number of grades: ");
        double random = input.nextDouble();
        int count = 1;

        while (count < random + 1) {
            System.out.print("Input Number: ");
            Double x = input.nextDouble();
            if (x < smallest) {
                smallest = x;
            }
            if (x > largest) {
                largest = x;
            }
            count++;
        }
        System.out.println("Smallest: " + smallest + ", Largest: " + largest);
    }
}

示例运行:

运行:
输入等级数:
5
输入号码:2.5454
输入号码:3.454
输入号码:-100.54
输入号码:5687
输入号码:579873.5654
最小:-100.54,最大:579873.5654
构建成功(总时间:15 秒)

【讨论】:

  • 感谢您抽出宝贵时间回复。我找到了一条不同的路线,但仍然感谢你激励我朝着正确的方向前进。
  • @Coco 那是什么路线?从其他答案/cmets来看,这是完全相同的逻辑。除了我给了你几乎所有你需要的东西,哈哈。无论如何,干杯。
【解决方案3】:

谢谢大家的提示。但是,当我运行我的程序时。我无法得到最大值和最小值的正确答案。

编辑:已解决。感谢所有做出贡献的人。

Scanner input = new Scanner(System.in);


System.out.println("Enter the number of grades: ");
double random = input.nextDouble();
double min = Integer.MIN_VALUE;
double max = Integer.MAX_VALUE;

double total=0;
int count = 1;
while (count < random+1) {




    System.out.println("Enter grade " + count + ":");

    double somenumber = input.nextDouble();
    total+=somenumber;

    count++;

    if (somenumber > max){
        max = somenumber;
    }
if (somenumber < min){
    min = somenumber;
}


}
System.out.println("Total is " + total);
System.out.println("Average is " + (total/random));
System.out.println("Largest number is " + max);
System.out.println("Smallest number is" + min);



        }

}

最大的数字是 2.14748 最小的数字是 -2.147478...这是打印出来的...我是不是在算术错误?

【讨论】:

  • 你混淆了最小值和最大值的初始化
  • 对不起,我认为这是正确的。 min = Integer.MIN_VALUE;和 max = Integer.MAX_VALUE;对不起,如果我听起来像我对 java 的基本知识,因为我这样做 >_>
  • 别担心,这也发生在我身上^^
  • 你试过了吗? double min = Double.POSITIVE_INFINITY;double max = 0.0;(假设值永远不会小于0)
  • 天啊我明白了天啊天啊天啊
【解决方案4】:

在while循环之上...

double max = 0;
double min = Double.MIN_VALUE;

在你设置一些数字后循环...

if (someNumber > max){
  max = someNumber;
}
if (someNumber < min){
  min = someNumber;
}

Np 很高兴它有帮助 :) 你应该考虑使用 for 循环而不是 while 循环,并像这样在循环外声明 someNumber:

double someNumber;
for (int i = 1; i <= random; i++){
  //...
}

为了让它更干净,你可以将 for 循环中的 i

i <= readNumGrades(input);
private double  readNumGrades(Scanner in){
  System.out.println("Enter the number of grades");
  return in.nextDouble();
}

所以你不再需要变量 count 和 random

【讨论】:

  • 这真的很有帮助。非常感谢。
  • 你至少应该初始化min和max,否则你的代码甚至不会编译...
  • 如果每个数字都是积极的,我假设将会/应该是(他只是没有费心处理这些情况,那么这不重要)
  • 这是不正确的 - 如果每个数字都是正数,那么 min 在您的解决方案中将始终为 0。
猜你喜欢
  • 2020-10-19
  • 2016-03-08
  • 2016-10-20
  • 2014-08-03
  • 2015-07-16
  • 2017-06-05
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多