需要帮助在数组中引用并使用数字格式

时间:2013-05-10 11:48:10

标签: java

我在任务中迷失了,需要一只手!基本上,我想写一个代码,用户可以在这里输入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();
      }
}
}

6 个答案:

答案 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)));