我在任务中迷失了,需要一只手!基本上,我想写一个代码,用户可以在这里输入12个月的每月英寸降雨量。它将计算总英寸,平均英寸,加上指出最多和最少雨的月份。我控制了总的和平均英寸。
最多和最少的雨是我遇到问题的地方。我知道如何编写代码以找出最高和最少的降雨量,但我不知道如何让它实际说出输出中的实际月份。它要我列出12个月的实际数字,例如,第7个月的7个。
我遇到的另一个问题是十进制格式。我把导入语句放在顶部,我把我认为正确的代码放在我认为正确的位置,但是当计算平均值时,它仍会产生一长串数字。即12.12121314141,当我希望它显示12.1。
非常感谢任何帮助。先感谢您!这是代码:
import java.util.Scanner;
import java.text.DecimalFormat;
public class Rainfall
{
public static void main (String [] args)
{
final int MONTHS = 12;
double[] rainFall = new double[MONTHS];
initRain(rainFall);
DecimalFormat formatter = new DecimalFormat("##0.0");
System.out.println("The total rainfall for this year is " +
totalRain(rainFall));
System.out.println("The average rainfall for this year is " +
averageRain(rainFall));
System.out.println("The month with the highest amount of rain is " +
highest);
System.out.println("The month with the lowest amount of rain is " +
leastRain(rainFall));
}
/**
totalRain method
@return The total rain fall in the array.
*/
public static double totalRain(double[] rainFall)
{
double total = 0.0; // Accumulator
// Accumulate the sum of the elements in the rain fall array
for (int index = 0; index < rainFall.length; index++)
//total += rainFall[index];
total = total + rainFall[index];
// Return the total.
return total;
}
/**
averageRain method
@return The average rain fall in the array.
*/
public static double averageRain(double[] rainFall)
{
return totalRain(rainFall) / rainFall.length;
}
/**
mostRain method
@return The most rain in the rain fall array.
*/
public static double mostRain(double[] rainFall)
{
double highest = rainFall[0];
for (int index = 0; index < rainFall.length; index++)
{
if (rainFall[index] > highest)
highest = rainFall[index];
}
return highest;
}
/**
leastRain method
@returns The least rain in rain fall array.
*/
public static double leastRain(double[] rainFall)
{
double lowest = rainFall[0];
for (int index = 0; index < rainFall.length; index++)
{
if (rainFall[index] < lowest)
lowest = rainFall[index];
}
return lowest;
}
/**
initRain method
@return The rain fall array filled with user input
*/
public static void initRain(double[] array)
{
double input; // To hold user input.
Scanner scan = new Scanner(System.in);
for (int index = 0; index < array.length; index++)
{
System.out.print("Enter rain fall for month " + (index + 1)
+": ");
array[index] = scan.nextDouble();
}
}
}
答案 0 :(得分:1)
对于格式问题,请执行以下操作:
System.out.println("The total rainfall for this year is " +
formatter.format(totalRain(rainFall)));
等等所有返回值。
我几个月没有得到这个问题。你能解释一下吗?
修改。好的,我明白了。分配higuestRain,...值时,循环内index
的值将是您要搜索的月份; )
答案 1 :(得分:0)
您定义了一个DecimalFormat,但您从未在程序中使用它。尝试
System.out.println("The average rainfall for this year is " + formatter.format(averageRain(rainFall)));
对于您使用格式化字符串定义它们的应用程序,Format类不是全局的,然后使用format来将Number打印到String或解析以将String转换为Number。
答案 2 :(得分:0)
要获取实际月份,您需要将索引存储在数组中,而不是索引包含的值。简而言之,您需要替换
highest = rainFall[index];
带
highest = index;
并且这将给出一个从0到11的数字,这是具有12个位置的数组中可用的索引。如果你想要一个从1到12的数字,与我们的月份有关,你可以这样做:
highest = index + 1
至于Formatter,你永远不会使用它。如果这是您的想法,Java将不会隐式使用它。您需要显式调用它的方法来获取propper结果。类似的东西:
formatter.format(totalRain(rainFall));
修改强>
为了帮助您了解这个想法,以下是mostRain
方法
public static double mostRain(double[] rainFall){
double highest = rainFall[0];
for (int index = 0; index < rainFall.length; index++)
{
if (rainFall[index] > rainFall[highest])
highest = index;
}
return highest + 1;
}
答案 3 :(得分:0)
对于十进制格式问题,这里是您可以使用的解决方案。
import java.text.DecimalFormat; import java.math.RoundingMode;
公共课测试
{
public static void main(String args [])
{
double i = 12.12121314141;
DecimalFormat format = new DecimalFormat("#.#");
format.setRoundingMode(RoundingMode.FLOOR);
String s = format.format(i);
i = Double.parseDouble(s);
System.out.println(i); //should be 12.1
} }
答案 4 :(得分:0)
要获得索引,您需要2个变量,一个用于存储降雨量,另一个用于记住索引(或月份):
public static double mostRain(double[] rainFall)
{
double highest = rainFall[0];
int monthIndex;
for (int index = 0; index < rainFall.length; index++)
{
if (rainFall[index] > highest)
highest = rainFall[index];
monthIndex = index;
}
return monthIndex;
}
该方法将返回降雨量最大的月份索引,然后您可以使用索引从阵列中检索实际降雨量。
答案 5 :(得分:0)
我知道如何编写代码以找出最高和最少的降雨量,但我不知道如何让它实际说出输出中的实际月份。
您可以按月返回当月而不是返回当月的最高降雨量:
public static int mostRainMonth(double[] rainFall)
{
double highest = rainFall[0];
int month = index;
for (int index = 0; index < rainFall.length; index++)
{
if (rainFall[index] > highest)
{
highest = rainFall[index];
month = index;
}
}
return month;
}
然后您可以按如下方式使用此方法:
int highestRainMonth = mostRainMonth(rainfall);
System.out.println("The month with the highest amount of rain is " +
rainfall[highestRainMonth]+" in the month "+highestRainMonth);
我遇到的另一个问题是十进制格式。我把导入语句放在顶部,我把我认为正确的代码放在我认为正确的位置,但是当计算平均值时,它仍会产生一长串数字。即12.12121314141,当我希望它显示12.1。
您刚刚初始化了DecimalFormatter
对象,但您还没有在任何地方使用它。
您可以按如下方式使用setMaximumFractionDigits
方法:
DecimalFormat df = new DecimalFormat("##0.0");
System.out.println("The average rainfall for this year is " +
formatter.format(averageRain(rainFall)));