在此之前,用户为numOfTimes输入一个int。说它是5.这将问5次问题。但每次通过它都会删除hrs1中的先前值。它需要是一个单独的变量。所以如果numOfTimes = 5那么我应该为“小时”获得5个不同的双打,为“分钟”获得5个不同的双打。 (假设用户输入不同的时间)但是它们都需要存储在不同的变量中。我该怎么做?
谢谢你我的问题已经回答了!
答案 0 :(得分:2)
使用数组..
int a[] = new int[5];
for(int i =0;i<5;i++){
a[i] = //your value
}
答案 1 :(得分:1)
您只需将“计算平均值”代码放在for循环之外。我不确定你想要如何计算平均值。但这有两个简单的方法。
方法一 - 跟踪总数并计算基本平均值。
public class AvgTime {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("How many times? ");
int numOfTimes = in.nextInt();
System.out.println("\n");
double hrTotal = 0;
double minTotal = 0;
for (int i = 1; i <= numOfTimes; i++){
System.out.println("What Time (military time): ");
System.out.print("Hour ");
double hrs1 = in.nextDouble();
System.out.print("Minute ");
double min1 = in.nextDouble();
hrTotal += hrs1;
minTotal += min1;
}
//calculate average
double avdHr1 = hrTotal/numOfTimes;
double timeMin1 = minTotal/numOfTimes;
System.out.println(avgHr1+":"+timeMin1 + " P.M");
}
}
方法2 - 使用列表并迭代两次
public class AvgTime {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("How many times? ");
int numOfTimes = in.nextInt();
System.out.println("\n");
ArrayList<Double> hours = new ArrayList<>();
ArrayList<Double> minutes = new ArrayList<>();
double minTotal = 0;
for (int i = 1; i <= numOfTimes; i++){
System.out.println("What Time (military time): ");
System.out.print("Hour ");
double hrs1 = in.nextDouble();
System.out.print("Minute ");
double min1 = in.nextDouble();
hours.add(hrs1);
minutes.add(min1);
}
//calculate average
double avgHr1 = 0;
double timeMin1 = 0:
for (int i = 0; i < hours.size(); i++) {
double hour = hours.get(i);
double minute = minutes.get(i);
//ToDo: calculate average so far
}
System.out.println(avgHr1+":"+timeMin1 + " P.M");
}
答案 2 :(得分:0)
您可以使用数组存储用户输入的信息。在循环之前,使用new
关键字创建一个数组,例如double[] hrs=new double[numOfTimes]
。在循环中,为每个输入hrs[i]=in.nextDouble()
写入数组中的不同位置。您可以稍后使用语法'name [index]'从数组中的位置读取,例如'hrs [2]'。请注意,对于java和许多其他语言,数组从0开始。这意味着对于名为arr的数组[1,2,3],arr[1]
等于2而不是1.这意味着如果你的for循环最好已从for(int i=1;i<=numofTimes;i++)
更改为'for(int i = 0; i
答案 3 :(得分:0)
<SOAPBOX,RANT,HIGHHORSE>
这更像是一个代码审查,而不是直接的答案,但有些事情一直困扰着我在stackoverrflow上观察到的新手问题。
开发时,我避免像瘟疫那样的键盘输入。这是一种苦差事,特别是在这个程序中有一个循环。这么多新手问题都有用户键盘输入。为什么?!它使开发变得更加困难!
我重写了你的程序以增加测试数据的能力,完全避免了在开发过程中用户输入的需要。测试结束后,只需切换测试/实时评论。
我确信这是一种更优雅的方式,但这种风格对我来说效果很好,我推荐它。
</SOAPBOX,RANT,HIGHHORSE>
import java.util.*;
import static java.lang.Math.abs;
public class AverageTimeWTestingData {
public static void main(String[] args) {
HourMin24[] ahm = null;
//EXACTLY ONE of the following lines must be commented out
//Test only:
ahm = getTestData();
//Live only:
// ahm = getDataFromUserInput();
double dTotalHours = 0.0;
for (HourMin24 hm : ahm){
System.out.println("Time: " + hm.iHour + ":" + hm.iMin);
dTotalHours += hm.iHour + (hm.iMin / 60);
}
System.out.println("Average time (" + ahm.length + "): " + (dTotalHours / ahm.length));
}
private static final HourMin24[] getDataFromUserInput() {
Scanner in = new Scanner(System.in);
System.out.print("How many times? ");
int numOfTimes = in.nextInt();
ArrayList<HourMin24> al24 = new ArrayList<HourMin24>(numOfTimes);
while(numOfTimes < 0) {
System.out.println("What Time (military time): ");
System.out.print("Hour ");
int iHour = in.nextInt();
System.out.print("Minute ");
int iMin = in.nextInt();
al24.add(new HourMin24(iHour, iMin));
numOfTimes--;
}
return al24.toArray(new HourMin24[al24.size()]);
}
private static final HourMin24[] getTestData() {
System.out.println("TEST MODE ON");
return new HourMin24[] {
new HourMin24(13, 1),
new HourMin24(23, 19),
new HourMin24(0, 59),
new HourMin24(16, 16),
};
}
}
class HourMin24 {
public int iHour;
public int iMin;
public HourMin24(int i_hour, int i_min) {
iHour = i_hour;
iMin = i_min;
}
}
输出:
[C:\java_code\]java AverageTimeWTestingData
TEST MODE ON
Time: 13:1
Time: 23:19
Time: 0:59
Time: 16:16
Average time (4): 13.0