简化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; 
    } 
} 
+2

你为什么要摆脱'ArrayList'?如果你这样做了'temperature.add(temp);'会更复杂,因为你必须自己管理数组的大小。这不会让事情变得简单,所以我不明白为什么你会这么做。如果由于某种原因您仍想使用数组,请查看[Arrays类](https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html) –

+1

可能想查看[Codereview](https://codereview.stackexchange.com/help/on-topic)。对于SO而言,这不是一个好问题,因为它会征求意见(“简单”?)。我也不明白你认为你使用数组会有什么好处?转换为数组应该非常简单 - 您已经知道如何使用'days'数组进行编码,那么在转换它时会出现什么问题? –

+1

从列表更改为数组*通常*使您的代码更复杂,而不是更简单。 –

你不能做这样的事(可以用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提供了DayOfWeekEnum

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; 

     } 

}