我试图摆脱Arraylist的温度,只使用一个阵列。我还想要一种更简单的打印阵列的方法,然后我正在做什么。代码按原样运行。我正在寻找一种更简单的方法。
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;
}
}
答案 0 :(得分:1)
如果您对java 8+的方法感兴趣,(这很可爱:-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);
答案 1 :(得分:0)
你不能做这样的事情(可以用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();
答案 2 :(得分:0)
由于您只需要1周的温度,因此可以使用double[] temp = new double[7]
对于打印,如果要在数组值之间添加字符串,for循环是最简单的,但如果您只想打印数组值,则可以使用System.out.println(Arrays.toString(yourArray));
输出,如
[1,2,3,4,5]
如果yourArray = {1,2,3,4,5}
答案 3 :(得分:0)
您可以在一行上声明并初始化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);
答案 4 :(得分:0)
Map
如评论所述,使用Collections使事情更简单而不是数组。
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() ;
答案 5 :(得分:0)
这就是我想出来的,我感谢所有的帮助。
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;
}
}