获取每周温度 - 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;
}
}
- 由于列表是有序的,并且假设索引 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);
}
}
}
我是任何类型计算机的全新初学者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;
}
}
- 由于列表是有序的,并且假设索引 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);
}
}
}