繁体   English   中英

如何接受和输出数组中的Doubles和Ints?

[英]How do I accept and output both Doubles and Ints in an Array?

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。

我想像输入一样处理输出数字。 双精度或整数。

无论如何,我可以使阵列在扫描器中接受两种类型的数字,还是我不得不采取另一种可行的方式?

您可以使用Scanner类的hasNextInt()hasNextDouble()方法来最初确定输入的数字是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并且将执行而没有任何错误。

数组只能定义一种类型,可以在其中定义double double [] personsWeight = new double[NUM_VALS];类型,例如double [] personsWeight = new double[NUM_VALS]; 当您输入int类型(例如236 ,它将被接受为double到Array中,也将输出为double

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

当您拥有所有表示相同类型值(例如重量,金额,测试分数等)的数字列表时,请选择一种适合于您要处理的所有值的类型。 对于重量,假设您要处理非整数,请选择浮点类型(即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();
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM