获取每周温度 - ArrayList 问题

Get Weekly Temperatures - ArrayList question

我是任何类型计算机的全新初学者programming/language(尝试改变职业)。我正在通过在线学校学习编程 1,我们使用 Zybooks(我发现它不是很有用,所以我一直在使用其他资源)。这是本周作业的提示:

开发一个 Java 程序,该程序将以日平均温度的形式存储一周的数据。将日期和平均温度存储在两个不同的数组列表中。您的程序应提示用户输入星期几(星期一至星期日)并显示每一天的日期和温度。如果输入“周”,程序的输出应提供每天的温度和每周的平均值。将循环和决策结构与数组结合使用来完成此作业。

下面是我目前的代码。我只是想知道 1) 我是否在正确的轨道上,以及 2) 如何打印出我的临时工以与工作日相匹配?我想过做一个 addList 的事情,但不会用临时工取代工作日吗?我有很多问题,我想找一位导师来帮助我。与此同时,我想我会问这个社区……特别是因为我的在线老师忽略了我所有的电子邮件和问题。很好玩...

import java.util.ArrayList;

import java.util.Scanner;

public class weeklyTemps {

    public static void main(String[] args) {
        final int NUM_TEMPS = 7;
        @SuppressWarnings("resource") //not sure where this came from...figure out later

        Scanner scnr = new Scanner(System.in);
        ArrayList<String> weekDays = new ArrayList<>();
        ArrayList<Integer> weekTemps = new ArrayList<>();

        String wkDay = "";
        int averageTemp = 0;
        int sumVal = 0;
        int i = 0;

            weekDays.add("Monday");
            weekDays.add("Tuesday");
            weekDays.add("Wednesday");
            weekDays.add("Thursday");
            weekDays.add("Friday");
            weekDays.add("Saturday");
            weekDays.add("Sunday");


            weekTemps.add(75); //temps for the week
            weekTemps.add(80);
            weekTemps.add(77);
            weekTemps.add(73);
            weekTemps.add(83);
            weekTemps.add(81);
            weekTemps.add(79);


            for (i = 0; i < weekDays.size(); ++i) { 
                System.out.print("Enter the week day: ");
                wkDay = scnr.nextLine();
            }

            for (i = 0; i < weekTemps.size(); ++i) {
                //sumVal = weekTemps //figure out how to add these together later w/out writing them all out
                averageTemp = sumVal / NUM_TEMPS;
            }

            if (wkDay.equals(weekDays())) {
                System.out.print("The temperature for that day is " + weekTemps.get(0) + " degrees.");
            }
            else {
                System.out.print("The average temperature for the week is " + averageTemp + " degrees.");
            }



return;

    }

    private static Object weekDays() { //what is this...i did not write this...
        // TODO Auto-generated method stub
        return null;
    }

}
  1. 由于列表是有序的,并且假设索引 0 处的气温对应于星期一,您可以这样做;

int indexOf = weekDays.indexOf(wkDay);

int temp = weekTemps.get(indexOf);

备选 1. 检查星期几 2. 边缘案例和验证 3. 使用递归

public class Temps {

    private static final List<DayOfWeek> days = new ArrayList<>();

    private static final List<Integer> temperatures = new ArrayList<>();

    public static void main(String... args) {
        askUntilComplete();
    }

    private static void askUntilComplete() {
        while (days.size() < DayOfWeek.values().length) {
            ask("Enter a day of week: ");
        }
        printAverage();
    }

    private static void ask(String question) {
        Scanner scanner = new Scanner(System.in);

        System.out.println(question);

        String input = scanner.next();

        try {
            DayOfWeek dayOfWeek = DayOfWeek.valueOf(input.toUpperCase());

            System.out.println("Enter a temperature for " + dayOfWeek.getDisplayName(TextStyle.FULL, Locale.ENGLISH));

            int temperature = scanner.nextInt();

            days.add(dayOfWeek);
            temperatures.add(temperature);
        } catch (IllegalArgumentException iae) {
            System.out.println("This day does not exist.");
            ask(question);
        } catch (InputMismatchException ime) {
            System.out.println("Weekday was ok but the temperature must be an integer.");
            ask(question);
        }
    }

    private static void printAverage() {
        System.out.println("The average temperature is: " + temperatures.stream().mapToInt(v -> v).average().orElse(0));
    }

}

选择 #2 1.用一个POJO表示每天的温度 2. 使用 equals/hashcode 合约 3. 使用 Set 与 equals/hash 的组合来确保 1 obj/day

    public static class DailyTemperatureProgram {

        private static Set<DailyTemperature> dailyTemperatures = new HashSet<>();

        private static void askUntilComplete() {
            while (dailyTemperatures.size() < DayOfWeek.values().length) {
                ask("Enter a day of week: ");
            }
            printAverage();
        }

        private static void printAverage() {
            System.out.println("The average temperature is: " + dailyTemperatures.stream()
                    .mapToInt(v -> v.temperature).average().orElse(0));
        }

        private static void ask(String question) {
            Scanner scanner = new Scanner(System.in);

            System.out.println(question);

            String input = scanner.next();

            try {
                DayOfWeek dayOfWeek = DayOfWeek.valueOf(input.toUpperCase());

                System.out.println("Enter a temperature for " + dayOfWeek.getDisplayName(TextStyle.FULL, Locale.ENGLISH));

                int temperature = scanner.nextInt();

                dailyTemperatures.add(new DailyTemperature(dayOfWeek, temperature));
            } catch (IllegalArgumentException iae) {
                System.out.println("This day does not exist.");
                ask(question);
            } catch (InputMismatchException ime) {
                System.out.println("Weekday was ok but the temperature must be an integer.");
                ask(question);
            }
        }

        private static final class DailyTemperature {

            private final DayOfWeek dayOfWeek;

            private final int temperature;

            private final int hashCode;

            private DailyTemperature(DayOfWeek dayOfWeek, int temperature) {
                this.dayOfWeek = dayOfWeek;
                this.temperature = temperature;
                this.hashCode = Objects.hash(dayOfWeek);
            }

            @Override
            public boolean equals(Object o) {
                if (o == this) {
                    return true;
                }
                if (o instanceof DailyTemperature) {
                    DailyTemperature other = (DailyTemperature) o;

                    return dayOfWeek == other.dayOfWeek;
                }
                return false;
            }
        }

    }

我的解决方案:

import java.util.ArrayList;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
            ArrayList<Integer> dayTemps = new ArrayList<>();
            ArrayList<String> dayNames = new ArrayList<>();

            dayNames.add("Monday");
            dayNames.add("Tuesday");
            dayNames.add("Wednesday");
            dayNames.add("Thursday");
            dayNames.add("Friday");
            dayNames.add("Saturday");
            dayNames.add("Sunday");


            dayTemps.add(75); //temps for the week
            dayTemps.add(80);
            dayTemps.add(77);
            dayTemps.add(73);
            dayTemps.add(83);
            dayTemps.add(81);
            dayTemps.add(79);

            Scanner scn = new Scanner(System.in);
            System.out.println("Enter the week day: ");
            String wkDay = scn.nextLine();
            scn.close(); //It is important to close the resources we use, preventing leak

            int indexOfWeekDay = dayNames.indexOf(wkDay); //get the in index of the day
            if(indexOfWeekDay != -1){ //if the name cannot be found, -1 is returned
                //User asked us about specific weekday:
                System.out.print("The temperature for " + dayNames.get(indexOfWeekDay) +" is " + dayTemps.get(indexOfWeekDay) + " degrees.");
            }else if(wkDay.equals("week")){
                //User asked us about average:
                //Only bother calculating average if asked ;)
                float averageTemp = 0; // I would recommend float for percision
                for (Integer dayTemp : dayTemps) { //This is called an enchanted for loop. I suggest looking it up ;)
                    averageTemp += dayTemp;
                }
                averageTemp /= dayTemps.size();
                System.out.print("The average temperature for the week is " + averageTemp + " degrees.");
            }else{
                //We can't recognise the entry
                System.out.println("Wrong entry: " + wkDay);
            }
    }
}