简化Java阵列和阵列列表

时间:2017-10-29 05:35:37

标签: java arrays arraylist

我试图摆脱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;
   }
}

6 个答案:

答案 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;

        }

}