0

我被卡住了......我的代码之前工作过,但现在它只是挂起。最重要的是,我似乎无法让我的getHighestgetSmallest方法返回正确的值。我不知道我是不是没有抓到什么东西。任何帮助都会很棒!

import java.util.Scanner;
import java.text.DecimalFormat;

public class Rainfall
{
  public static void main(String[] args)
  {
    final int MONTHS = 12;
    double[] rain = new double[MONTHS];
    initRain(rain);
    double total = totalRain(rain);
    double average = averageRain(rain, total);
    double most = mostRain(rain);
    double least = leastRain(rain);
    DecimalFormat digit = new DecimalFormat("#.0");
    System.out.println("The total rainfall of the year is " + digit.format(total));
    System.out.println("The average rainfall of the year is " + digit.format(average));
    System.out.println("The month with the highest amount of rain is " + most);
    System.out.println("The month with the lowest amount of rain is " + least);
  }
  public static void initRain(double[] array)
  {
    Scanner keyboard = new Scanner(System.in);
    for (int x = 0; x < array.length; x++)
    {  
      System.out.print("Enter Rainfall for month " + (x + 1) + ": ");
      array[x] = keyboard.nextDouble();
    }
  }
  public static double totalRain(double[] array)
  {
    double total = 0;
    for (int x = 0; x < 12; x++)
      total += array[x];
    return total;
  }
  public static double averageRain(double[] array, double total)
  {
    return total / array.length;
  }
  public static double mostRain(double[] array)
  {;
    double maximum = array[1];
    int value = 0;
    for (int i=0; i < 12; i = i++)
    {
      if (array[i] >= maximum)
        maximum = array[i];
        value = i;
      }
    return value;
  }
  public static double leastRain(double[] array)
  {
    double minimum = array[0];
    int value;
    for (int i=0; i < 12; i++)
    {
      if (array[i] <= minimum) 
        minimum = array[i];
        value = i;
      }
    return value;
  }
}
4

1 回答 1

3

您的程序因为这一行而挂起:

for (int i=0; i < 12; i = i++)

问题是在变量递增之前i++返回的值,所以循环的递增步骤与写入相同。因此,变量永远不会达到循环的转义条件。i i=ii

它应该是:

for (int i=0; i < 12; i++)

稍微清理一下你的代码,可以改进很多。有很多简单的错误。

import java.util.Scanner;
import java.text.DecimalFormat;

public class Rainfall
{
  public static void main(String[] args)
  {
    final int MONTHS = 12;
    double[] rain = new double[MONTHS];
    initRain(rain);
    double total = totalRain(rain);
    double average = averageRain(rain, total);
    int most = mostRain(rain);
    int least = leastRain(rain);
    DecimalFormat digit = new DecimalFormat("#.0");
    System.out.println("The total rainfall of the year is " + digit.format(total));
    System.out.println("The average rainfall of the year is " + digit.format(average));
    System.out.println("The month with the highest amount of rain is " + (most + 1));
    System.out.println("The month with the lowest amount of rain is " + (least + 1));
  }
  public static void initRain(double[] array)
  {
    Scanner keyboard = new Scanner(System.in);
    for (int x = 0; x < array.length; x++)
    {
      System.out.print("Enter Rainfall for month " + (x + 1) + ": ");
      array[x] = keyboard.nextDouble();
    }
  }
  public static double totalRain(double[] array)
  {
    double total = 0;
    for (int x = 0; x < 12; x++)
      total += array[x];
    return total;
  }
  public static double averageRain(double[] array, double total)
  {
    return total / array.length;
  }
  public static int mostRain(double[] array)
  {
    double maximum = array[1];
    int value = 0;
    for (int i=0; i < 12; i++) {
      if (array[i] >= maximum) {
        maximum = array[i];
        value = i;
      }
    }
    return value;
  }
  public static int leastRain(double[] array)
  {
    double minimum = array[0];
    int value = 0;
    for (int i=0; i < 12; i++)
    {
      if (array[i] <= minimum) {
        minimum = array[i];
        value = i;
      }
    }
    return value;
  }
}
于 2012-12-06T16:54:05.480 回答