![](/img/trans.png)
[英]Java - print user input of 4 integers, and the lowest, highest and average number
[英]Java - Highest, Lowest and Average
我刚开始学习,我需要一些练习帮助。
我需要最终用户输入每个月的降雨量。 然后我需要把平均降雨量,最高月份和最低月份以及降雨量高于平均值的月份排除在外。
我一直在最高和最低的数字,我不知道为什么。 我正在认真地拔掉头发。 任何帮助将不胜感激。
这是我到目前为止:
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;
}
}
谢谢,
艾米莉
首先,因为这是你的功课,你不应该在stackoverflow.com上问它
现在让我们来看看你的代码
lowest = numgroup[0];
为什么? 您似乎尝试使用此算法来查找min:
1.1假设第一个数字(你认为是
numgroup[0]
)是min(在你的代码中命名为lowest
)
1.2。 将其与所有其他数字进行比较,如果任何数字较小,则替换min(即lowest
)。
但是, numgroup[0]
不是你的第一个号码! 你是这样开始你的第一个循环
for(index = 1;...
所以,你的第一个数字是numgroup[1]
。
接下来,你的第二个循环开始了
for(minIndex = 0;
而索引0处的元素甚至不打算供您使用(我猜)
接下来,您找出当前迭代中的数字是否小于lowest
是
if (numgroup[0] < lowest)
总是将索引0处的元素与lowest
元素进行比较(我猜)不是你的意图。
代替
if (numgroup[0] < lowest)
你必须写
if (numgroup[minIndex] < lowest)
同样的道理
if (numgroup[1] > highest)
应该是
if (numgroup[maxIndex] > highest)
你做
lowest = numgroup[0]
接着
if (numgroup[0] < lowest)
因为numgroup [0]总是等于最低,所以永远不会是“真”。 而你的if子句应该是if (numgroup[minIndex] < lowest)
。 同样的事情适用于最高。
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");
}
如果您的作业没有限制,只需尝试使用最小/最大的集合。
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);
否则最小/最大应该如下所示:
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++) {
}
更改第一个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.