[英]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
。 它将处理int
和double
并且将执行而没有任何错误。
数组只能定义一种类型,可以在其中定义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.