需要帮助从数组中检索最大索引

时间:2012-12-06 16:34:31

标签: java

我被卡住了...我的代码工作得比较早,但现在它只是挂起了。最重要的是,我似乎无法使用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;
  }
}

1 个答案:

答案 0 :(得分:3)

你的程序因为这句话而挂起:

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

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

它应该是:

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;
  }
}