如何在阵列中接受并输出双打和Ints?

时间:2017-02-22 05:44:13

标签: java arrays printing int double

import java.util.Scanner;

public class PeopleWeights {

   public static void main(String[] args) {

     Scanner scnr = new Scanner(System.in);

     final int NUM_VALS = 5;

     int [] personsWeight = new int[NUM_VALS];

     int i = 0;

     for (i = 0; i < NUM_VALS; ++i) {
     System.out.print("Enter weight " + (i + 1) + ": ");
     System.out.println();
     personsWeight[i] = scnr.nextInt();
     }

     double sumVal = 0.0;

     for (i = 0; i < NUM_VALS; ++i) {
        sumVal = sumVal + personsWeight[i];
     }

     double avgVal = 0.0;

     for (i = 0; i < NUM_VALS; ++i) {
        avgVal = sumVal / NUM_VALS;
     }

     double maxVal = 0.0;

     for (i = 0; i < NUM_VALS; ++i) {
        maxVal = personsWeight[0];
        if (maxVal < personsWeight[i]) {
           maxVal = personsWeight[i];
        }
     }

     System.out.println();
     System.out.println(personsWeight[1] + " " + personsWeight[2] + " " 
     + personsWeight[3] + " " + personsWeight[4] + " " + personsWeight[5]);
//I know that this can be cleaner but this is where the 
//problem occurs with a InputMismatchException. 
//I know it's caused by the double being introduced 
//but don't know how to fix it.


     System.out.println("Total weight: " + sumVal);

     System.out.println("Average weight: " + avgVal);

     System.out.println("Max weight: " + maxVal);

     return;
  }
}

输入如下: 236, 89.5, 142, 166.3, 93。

我想像输入一样处理输出数字。 Double或Int。

无论如何,我可以让阵列接受扫描仪中的两种类型的数字,还是我必须采用另一种方式来运作?

3 个答案:

答案 0 :(得分:1)

您可以使用hasNextInt()类的hasNextDouble()Scanner方法初步确定输入的数字是Double还是Integer。

if (scnr.hasNextInt()) {
    int n = scnr.nextInt();
    //your code to handle `integer` case
}
else if(scnr.hasNextDouble()) {
    double d = scnr.nextDouble();
    //your code to handle `double` case
}

仅供参考,您也可以将所有内容保留为double。它将处理intdouble并且将执行而不会出现任何错误。

答案 1 :(得分:0)

我能想到解决这个问题的最简单方法是从Scanner中获取String对象,然后将它们转换为它们的实际类型(如果String包含一个句点,你可以检测到它是双倍的当你需要将它们的值用于任何计算时。

答案 2 :(得分:0)

如果您有一个代表相同类型值的数字列表(例如重量,金额,测试分数等),请选择一种适合您想要处理的所有值的类型。对于权重,假设您要处理非整数,请选择浮点类型(即double)。为了钱,你可以选择BigDecimal;对于考试成绩,您可以选择int,除非您希望某人可能会因某事而扣除半分,然后您选择double。关键是,几乎永远是为同一类值保留不同数值类型的理由。

几乎永远有理由关注输入的格式 - 即。你真的关心输入中的重量是否有小数点吗?不,你只关心价值本身。这使一些较新的程序员感到困惑 - 他们将数字的值等同于其表示为字符串。但几乎总是,只有价值才重要。数字236,236.0,236.00000,2.36e2和0xec之间没有区别 - 值相同,表示无关紧要。 [是的,我知道如果你在Java程序中使用这些不同的表单,一些将被视为int,一些将被视为double,这可能会有所不同。但这里的数字是在输入文件中,而不是在代码中。]

所以只需将权重设为double,不要担心整数。

 double[] personsWeight = new double[NUM_VALS];

 int i = 0;

 for (i = 0; i < NUM_VALS; ++i) {
     System.out.print("Enter weight " + (i + 1) + ": ");
     System.out.println();
     personsWeight[i] = scnr.nextDouble();
 }