有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算用户定义年数内四个季度的降雨量

我是Java新手,正在尝试做一项作业。。。但是我现在感觉很失落。我们还没有介绍数组,所以我们的词汇表有点有限

1.)修改当前代码,使其能够处理多年的降雨数据。为用户提供选项,以提供他们希望在计划中输入以进行评估的实际年数。该程序必须输出降雨量最多的年份(即第1年、第2年等)和总降雨量最少的年份

下面是我的代码:

import java.util.Scanner;

public class Test2OF
{
   public static void main(String[] args) 
   { 
      Scanner scan = new Scanner(System.in); 
      double[] rainfall = new double[4]; 
      double totalRainfall = 0.0; 
      double max = 0, min  = 0;
      int year = scan.nextInt();
      int maxQuarter = 1;
      int minQuarter = 1;

      // Prompt user for the number of years
      System.out.println("Enter the number of years: ");
      year = scan.nextInt();

      for (int i=0; i < year*4; i++) 
      { 
         System.out.print("Enter rainfall for quarter " + (i+1) + ": "); 
         rainfall[i] = scan.nextDouble(); 
         totalRainfall += rainfall[i]; 
         if (i == 0)
         {
            max = min = rainfall[i];
         }

         {
            if (rainfall[i] > max) {
               max = rainfall[i];
               maxQuarter = i + 1;
            }
            if (rainfall[i] < min) {
               min = rainfall[i];
               minQuarter = i + 1;
            }
         }
     }

   System.out.println("Total rainfall = "+totalRainfall); 
   System.out.println("Average rainfall = "+(totalRainfall / 4.0)); 
   System.out.println("Max quarter rainfall = "+ max);
   System.out.println("Min quarter rainfall = " + min);
   System.out.println("Max quarter rainfall = "+ maxQuarter);
   System.out.println("Min quarter rainfall = " + minQuarter);

   }//end main 
}//end class

在编译时,当我尝试输入第5季度的数据时,会出现此异常

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Test2OF.main(Test2OF.java:22)

我也不知道如何确定哪一年年底降雨量最多/最少

谢谢你的帮助!多谢各位


共 (3) 个答案

  1. # 1 楼答案

    问题:

    year*4
    

    你的rainfall只有4号,这意味着它只适合有4个季度的1年

    解决方案:

    您需要计算指定年份数的季度数,然后使用year*4调整数组大小

    示例:

    Scanner scan = new Scanner(System.in); 
      double[] rainfall; 
      double totalRainfall = 0.0; 
      double max = 0, min  = 0;
      int year = 0;
      int maxQuarter = 1;
      int minQuarter = 1;
    
      System.out.println("Enter the number of years: ");
      year = scan.nextInt();
      rainfall = new double[year*4]
    

    编辑:

    public static void main(String[] args) 
    { 
       Scanner scan = new Scanner(System.in); 
       double[] rainfall; 
       int curyear = 0;
       double totalRainfall = 0.0; 
       double max = 0, min  = 0;
       int year = 0;
       int maxQuarter = 1;
       int minQuarter = 1;
    
       // Prompt user for the number of years
       System.out.println("Enter the number of years: ");
       year = scan.nextInt();
       rainfall = new double[year*4];
       for (int i=0; i < year*4 + 1; i++) 
       { 
           if((i % 4) == 0 && i != 0)
           {
                System.out.println();
                System.out.println("YEAR: " + ++curyear );
                System.out.println("Total rainfall = "+totalRainfall); 
                System.out.println("Average rainfall = "+(totalRainfall / 4.0)); 
                System.out.println("Max quarter rainfall = "+ max);
                System.out.println("Min quarter rainfall = " + min);
                System.out.println("Max quarter rainfall = "+ maxQuarter);
                System.out.println("Min quarter rainfall = " + minQuarter);
                System.out.println();
                if(i == (year*4))
                    break;
           }
    
          System.out.print("Enter rainfall for quarter " + (i+1) + ": "); 
          rainfall[i] = scan.nextDouble(); 
          totalRainfall += rainfall[i]; 
          if (i == 0)
          {
             max = min = rainfall[i];
          }
    
          {
             if (rainfall[i] > max) {
                max = rainfall[i];
                maxQuarter = i + 1;
             }
             if (rainfall[i] < min) {
                min = rainfall[i];
                minQuarter = i + 1;
             }
          }
    
    
      }
    
    
    
    }//end main 
    
  2. # 2 楼答案

    new double[4];  this is wrong.
    

    若你们从用户那个里得到了大小,那个么你们为什么要初始化呢

    在用户提供大小后提供大小,如new double[year];

  3. # 3 楼答案

    我一开始就注意到的第一件事是

    Int year = Scanner.nextInt();
    Blahblahblah
    year = Scanner.nextInt();
    

    不要给年份赋值

    Int year;
    Year = scanner.nextInt();
    

    至于其余的我不知道我是否想在这方面帮助你。帮助你是不道德的,因为这是为了学习。请注意,告诉你的教授你无法完成作业是完全可以的,他会比互联网提供更好的帮助

    从iPad发送,请原谅拼写和大写错误