简体   繁体   English

Java - 最高,最低和最低

[英]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 现在让我们来看看你的代码

  1. 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 as lowest 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM