简化Java阵列和阵列列表
我想摆脱温度的Arraylist并只使用一个数组。我也想要一个更简单的方法来打印数组,然后我在做什么。代码按原样运行。我正在寻找一个更简单的方法来做到这一点。简化Java阵列和阵列列表
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
ArrayList<Double> temperatures = new ArrayList<>();
String[] days = new String[7];
days[0] = "Monday";
days[1] = "Tuesday";
days[2] = "Wednesday";
days[3] = "Thursday";
days[4] = "Friday";
days[5] = "Saturday";
days[6] = "Sunday";
for (String day : days) {
System.out.println("Enter the temperature for: " + day);
double temp = scnr.nextDouble();
temperatures.add(temp);
}
double sum = 0.0;
for (int i = 0; i < temperatures.size(); i++) {
sum += temperatures.get(i);
}
double average = (double) sum/temperatures.size();
System.out.print("You entered: ");
System.out.print(temperatures.get(0));
System.out.println(" for " + days[0]);
System.out.printf("The average temperature for the week is: %.2f", average);
scnr.close();
return;
}
}
你不能做这样的事(可以用HashMap的是清洁剂):
HashMap<String, Double> temperatures = new HashMap<>();
String[] days = new String[] { "Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday","Sunday"};
double sum = 0.0;
for (String day : days) {
System.out.println("Enter the temperature for: " + day);
double temp = scnr.nextDouble();
sum += temp;
temperatures.put(day, temp);
}
double average = (double) sum/temperatures.size();
既然你只需要下1周,你可以使用double[] temp = new double[7]
印刷,for循环是最简单的,如果你想添加字符串之间的数组值,但如果你只是想打印数组值本身,你可以使用System.out.println(Arrays.toString(yourArray));
这将输出像
[1,2,3,4,5]
如果yourArray = {1,2,3,4,5}
可以声明和在同一行初始化days
,和使用它确定temperatures
数组的长度。假设你使用Java 8+,你可以使用DoubleStream
来获得数组的平均值。你可以使用printf
来简化你的最终输出。像,
Scanner scnr = new Scanner(System.in);
String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", //
"Friday", "Saturday", "Sunday" };
double[] temperatures = new double[days.length];
for (int i = 0; i < days.length; i++) {
System.out.println("Enter the temperature for: " + days[i]);
temperatures[i] = scnr.nextDouble();
}
double average = DoubleStream.of(temperatures).average().getAsDouble();
for (int i = 0; i < days.length; i++) {
System.out.printf("You entered: %.2f for %s%n", temperatures[i], days[i]);
}
System.out.printf("The average temperature for the week is: %.2f", average);
如果你有兴趣java 8+方法来做到这一点,(这是远远cuter: - D);对此有一个破解。我们使用流API来做到这一点,你可以做你的阵列小码这么多,
String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday","Friday", "Saturday", "Sunday" };
ArrayList<Double> temperatures = new ArrayList<>();
Arrays.stream(days).forEach(day -> {
System.out.println("Enter the temperature for: " + day);
double temp = scnr.nextDouble();
temperatures.add(temp);
});
double average = temperatures.stream().reduce(Double::sum).get()/temperatures.size();
System.out.printf("The average temperature for the week is: %.2f", average);
集合 - Map
作为评价,使用类别使事情变得更简单,而不是阵列。
A Map
是键值对的集合。在这里,我们希望每周的每一天都映射到一个温度。
DayOfWeek
无需创建日的一周的阵列。 Java提供了DayOfWeek
Enum。
Float
的32位浮点数是足够的温度。不需要64位双。
流甲stream in Java是通过一系列值的工作,运行的代码对每个值的一种方式。在这里,我们使用流来计算我们映射的星期几的每个温度的平均值。
例
Map< DayOfWeek , Float > dayTemp = new HashMap<>();
for(DayOfWeek dow : EnumSet.allOf(DayOfWeek.class)) {
System.out.println("Enter temp on: " + dow.getDisplayName(TextStyle.FULL , Locale.US) ;
Float temp = scanner.nextFloat();
dayTemp.put(dow , temp) ;
}
Float avg = dayTemp.values().stream().average() ;
这是我想出了,我感谢所有的帮助。
Scanner scnr = new Scanner(System.in);
double temp[]=new double[7];
String[] days = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
double sum=0;
for (int i=0;i<days.length;i++) {
System.out.println("Enter the temperature for: " + days[i]);
temp[i] = scnr.nextDouble();
sum+=temp[i];
}
double average = sum/temp.length;
for(int i=0;i<days.length;i++){
System.out.println("You entered "+temp[i]+" for "+days[i]);
}
System.out.printf("%nThe average temperature for the week is: %.2f", average);
scnr.close();
return;
}
}
你为什么要摆脱'ArrayList'?如果你这样做了'temperature.add(temp);'会更复杂,因为你必须自己管理数组的大小。这不会让事情变得简单,所以我不明白为什么你会这么做。如果由于某种原因您仍想使用数组,请查看[Arrays类](https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html) –
可能想查看[Codereview](https://codereview.stackexchange.com/help/on-topic)。对于SO而言,这不是一个好问题,因为它会征求意见(“简单”?)。我也不明白你认为你使用数组会有什么好处?转换为数组应该非常简单 - 您已经知道如何使用'days'数组进行编码,那么在转换它时会出现什么问题? –
从列表更改为数组*通常*使您的代码更复杂,而不是更简单。 –