[英]Java - Highest, Lowest and Average
I've just started studying and I need help on one of my exercises. 我刚开始学习,我需要一些练习帮助。
I need the end user to input a rain fall number for each month. 我需要最终用户输入每个月的降雨量。 I then need to out put the average rainfall, highest month and lowest month and the months which rainfall was above average.
然后我需要把平均降雨量,最高月份和最低月份以及降雨量高于平均值的月份排除在外。
I keep getting the same number in the highest and lowest and I have no idea why. 我一直在最高和最低的数字,我不知道为什么。 I am seriously pulling my hair out.
我正在认真地拔掉头发。 Any help would be greatly appreciated.
任何帮助将不胜感激。
This is what I have so far: 这是我到目前为止:
public class rainfall {
/**
* @param args
*/
public static void main(String[] args)
{
int[] numgroup;
numgroup = new int [13];
ConsoleReader console = new ConsoleReader();
int highest;
int lowest;
int index;
int tempVal;
int minMonth;
int minIndex;
int maxMonth;
int maxIndex;
System.out.println("Welcome to Rainfall");
for(index = 1; index < 13; index = index + 1)
{
System.out.println("Please enter the rainfall for month " + index);
tempVal = console.readInt();
while (tempVal>100 || tempVal<0)
{
System.out.println("The rating must be within 0...100. Try again");
tempVal = console.readInt();
}
numgroup[index] = tempVal;
}
lowest = numgroup[0];
for(minIndex = 0; minIndex < numgroup.length; minIndex = minIndex + 1);
{
if (numgroup[0] < lowest)
{
lowest = numgroup[0];
minMonth = minIndex;
}
}
highest = numgroup[1];
for(maxIndex = 0; maxIndex < numgroup.length; maxIndex = maxIndex + 1);
{
if (numgroup[1] > highest)
{
highest = numgroup[1];
maxMonth = maxIndex;
}
}
System.out.println("The average monthly rainfall was ");
System.out.println("The lowest monthly rainfall was month " + minIndex);
System.out.println("The highest monthly rainfall was month " + maxIndex);
System.out.println("Thank you for using Rainfall");
}
private static ConsoleReader ConsoleReader() {
return null;
}
}
Thanks, 谢谢,
Emily 艾米莉
First, since this is your homework, you should not be asking it on stackoverflow.com 首先,因为这是你的功课,你不应该在stackoverflow.com上问它
Now let have a look at your code 现在让我们来看看你的代码
lowest = numgroup[0];
Why? 为什么? It seems that you trying to use this algorithm to find min:
您似乎尝试使用此算法来查找min:
1.1 Suppose first number (which you think is
numgroup[0]
) is min (named aslowest
in your code)1.1假设第一个数字(你认为是
numgroup[0]
)是min(在你的代码中命名为lowest
)
1.2.1.2。 Compare it with all other numbers, if any of the numbers is smaller, replace min (ie
lowest
).将其与所有其他数字进行比较,如果任何数字较小,则替换min(即
lowest
)。
But, numgroup[0]
is not your first number! 但是,
numgroup[0]
不是你的第一个号码! You started your first for loop like this 你是这样开始你的第一个循环
for(index = 1;...
So, your first number is numgroup[1]
. 所以,你的第一个数字是
numgroup[1]
。
Next, your second loop starts like 接下来,你的第二个循环开始了
for(minIndex = 0;
whereas the element at index 0 is never even intended to be used by you (I guess) 而索引0处的元素甚至不打算供您使用(我猜)
Next, your condition for finding out if the number in current iteration is less than lowest
is 接下来,您找出当前迭代中的数字是否小于
lowest
是
if (numgroup[0] < lowest)
which always compares element at index 0 with lowest
which (I guess) is not your intention. 总是将索引0处的元素与
lowest
元素进行比较(我猜)不是你的意图。
instead of 代替
if (numgroup[0] < lowest)
you have to write 你必须写
if (numgroup[minIndex] < lowest)
the same goes for 同样的道理
if (numgroup[1] > highest)
which should be 应该是
if (numgroup[maxIndex] > highest)
You do 你做
lowest = numgroup[0]
and then 接着
if (numgroup[0] < lowest)
which will never be "true" as numgroup[0] is always equal to lowest. 因为numgroup [0]总是等于最低,所以永远不会是“真”。 Rather your if-clause should be something like
if (numgroup[minIndex] < lowest)
. 而你的if子句应该是
if (numgroup[minIndex] < lowest)
。 The same thing applies for highest. 同样的事情适用于最高。
public static void main(String[] args)
{
int[] numgroup = new int [12]; // 12 months - 12 elements
ConsoleReader console = new ConsoleReader();
int highest;
int lowest;
int index;
int tempVal;
int minIndex;
int maxIndex;
System.out.println("Welcome to Rainfall");
// Input (index now 0-based)
for(index = 0; index < 12; index = index + 1)
{
System.out.println("Please enter the rainfall for month " + index + 1);
tempVal = console.readInt();
while (tempVal>100 || tempVal<0)
{
System.out.println("The rating must be within 0...100. Try again");
tempVal = console.readInt();
}
numgroup[index] = tempVal;
}
lowest = numgroup[0];
highest = numgroup[0];
int total = 0.0;
// Loop over data (using 1 loop)
for(index = 0; index < 12; index = index + 1)
{
int curr = numgroup[index];
if (curr < lowest) {
lowest = curr;
minIndex = index;
}
if (curr > highest) {
highest = curr;
maxIndex = index;
}
total += curr;
}
float avg = (float)total / numgroup.length;
System.out.println("The average monthly rainfall was " + agv);
// +1 to go from 0-based index to 1-based month
System.out.println("The lowest monthly rainfall was month " + minIndex + 1);
System.out.println("The highest monthly rainfall was month " + maxIndex + 1);
System.out.println("Thank you for using Rainfall");
}
Just try to use collections for min/max if there is no restriction in your homework. 如果您的作业没有限制,只需尝试使用最小/最大的集合。
Vector<Integer> rainfallData = new Vector<Integer>();
int avg = 0;
for(index = 1; index < 13; index = index + 1)
{
System.out.println("Please enter the rainfall for month " + index);
tempVal = console.readInt();
while (tempVal>100 || tempVal<0)
{
System.out.println("The rating must be within 0...100. Try again");
tempVal = console.readInt();
}
rainfallData.add(tempVal);
avg+=tempVal;
}
avg /= rainfallData.size();
int min = Collections.min(rainfallData);
int max = Collections.max(rainfallData);
Otherwise a min/max should look like this: 否则最小/最大应该如下所示:
public int min(int[] vals) {
if( vals==null || vals.length==0} {
throw new IllegalArgumentException();
} else if( vals.length == 1 ) {
return vals[0];
}
int min = vals[0]; // Dont initialize with Integer.MAX_VALUE or so
for(int i = 1; i < vals.length; ++i ) {
if( vals[i] < min ) {
min = vals[i];
}
}
return min;
}
for (index = 0; index < 12; index++) {
}
change the first for loop and the following 更改第一个for循环和以下
lowest = numgroup[0];
for (minIndex = 0; minIndex < numgroup.length; minIndex = minIndex + 1)
{
if (numgroup[minIndex] < lowest) {
lowest = numgroup[minIndex];
}
}
highest = numgroup[0];
for (maxIndex = 0; maxIndex < numgroup.length; maxIndex = maxIndex + 1)
{
if (numgroup[maxIndex] > highest) {
highest = numgroup[maxIndex];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.