Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行程序时,额外的输入命令会导致逻辑错误_Java_While Loop_Next - Fatal编程技术网

Java 执行程序时,额外的输入命令会导致逻辑错误

Java 执行程序时,额外的输入命令会导致逻辑错误,java,while-loop,next,Java,While Loop,Next,我正在尝试执行一个名为AverageRainfall的程序。大多数输入都工作得很好,我的while语句在开始时还可以,但是变量monthRain下有多个月,monthRain的while语句在不同的月份中没有运行,只有初始输入命令没有任何作用 ETA:发布整个测试代码 import java.util.Scanner; //for Scanner class public class AverageRainfall { public static void main(Strin

我正在尝试执行一个名为AverageRainfall的程序。大多数输入都工作得很好,我的while语句在开始时还可以,但是变量monthRain下有多个月,monthRain的while语句在不同的月份中没有运行,只有初始输入命令没有任何作用

ETA:发布整个测试代码

  import java.util.Scanner; //for Scanner class

  public class AverageRainfall
  {
  public static void main(String[] args)
  {
     final int NUM_MONTHS = 12;     //Months per year
     int years;                     //Number of years
     double monthRain;                  //Rain for a month
     double totalRain = 0;              //Rainfall accumulator
     double average;                    //Average rainfall

     Scanner keyboard = new Scanner(System.in);

     {
     System.out.print("Enter the number of years: ");
     years = keyboard.nextInt();

     while (years < 1)
        {
        System.out.print("Invalid. Enter 1 or greater: ");
        years = keyboard.nextInt();
        }
     }

      { 
         System.out.println("Enter the rainfall, in inches, for each month. ");
         monthRain = keyboard.nextDouble();

         for(int y = 1; y <= years; y++){

           for(int m = 1; m <= NUM_MONTHS; m++){

       System.out.print("Year" + y + "month" + m + ": ");
       monthRain = keyboard.nextDouble(); 
       }
       }
       while (monthRain < 0)
      {
         System.out.print("Invalid. Enter 0 or greater: ");
         monthRain = keyboard.nextDouble();
      }
      }  

       {
        totalRain += monthRain;

        average = totalRain / (years * NUM_MONTHS);

        System.out.println("\nNumber of months: " + (years * NUM_MONTHS) );
        System.out.println("Total rainfall: " + totalRain + " inches");
        System.out.println("Average monthly rainfall: " + average + " inches");
       }
    }
}

这是完整的代码。

用户每次输入一个月的降雨量时,您可以将其添加到总降雨量中。一旦他输入完数据,你就可以进行平均

`导入java.util.Scanner; 公开课考试{

public static void main(String[]args){
    double monthRain=0;
    double totalRain=0;
    Scanner keyboard = new Scanner(System.in);
    int years = 1;
    int NUM_MONTHS = 12;
    System.out.println("Enter the rainfall, in inches, for each month. ");
    for(int y = 1; y <= years; y++){
        for(int m = 1; m <= NUM_MONTHS; m++){

            System.out.print("Year" + y + "month" + m + ": ");
            monthRain = keyboard.nextDouble(); 
            totalRain+=monthRain;
        }
    }
    int totalMonth = years*NUM_MONTHS;
    System.out.println("\nNumber of months: " + totalMonth );
    System.out.println("Total Rain: "+totalRain+" inches");
    double average = totalRain / totalMonth;
    System.out.println("Average monthly rainfall: " + average + " inches");

}
}
`您使用了不必要的大括号。此外,代码中还存在一些逻辑缺陷。我已经修正了你的密码。请参阅以下代码:

import java.util.Scanner; //for Scanner class

public class AverageRainfall {
 public static void main(String[] args) {
    final int NUM_MONTHS = 12; // Months per year
    int years; // Number of years
    double monthRain=0; // Rain for a month
    double totalRain = 0; // Rainfall accumulator
    double average; // Average rainfall

    Scanner keyboard = new Scanner(System.in);

    System.out.print("Enter the number of years: ");
    years = keyboard.nextInt();

    while (years < 1) {
        System.out.print("Invalid. Enter 1 or greater: ");
        years = keyboard.nextInt();

    }


    System.out.println("Enter the rainfall, in inches, for each month. ");
    for (int y = 1; y <= years; y++) {

        for (int m = 1; m <= NUM_MONTHS; m++) {

            System.out.print("Year" + y + "month" + m + ": ");
            monthRain = keyboard.nextDouble();

            while (monthRain < 0) {
                System.out.print("Invalid. Enter 0 or greater: ");
                monthRain = keyboard.nextDouble();
            }
            totalRain += monthRain;
        }   
    }   





    average = totalRain / (years * NUM_MONTHS);

    System.out.println("\nNumber of months: " + (years * NUM_MONTHS));
    System.out.println("Total rainfall: " + totalRain + " inches");
    System.out.println("Average monthly rainfall: " + average
                + " inches");

 }
}

你能发布整个代码以便我测试它吗?是的,发布完整的代码。难以猜测。但我认为现在发生的是totalRain+=monthRain;不在循环中,这就是所有月份都不在循环中的原因considered@Kognizant我该怎么把它放到循环中?实际上Ziad已经演示了如何把它放到循环中我在使用你的代码时仍然遇到同样的问题,它说两年只下了一英寸的雨。我在System.out.println中修复了一些东西,第一个应该是总雨。你在使用什么输入?如果你现在执行代码,在所有月份都输入1,你会得到总降雨量=12,平均降雨量=1。我用了2年的时间把数字随机化,这太愚蠢了。对于我的任务,年份和降雨量必须是可变的,超过1年的任何年份都可以接受,超过0的任何降雨量都可以接受。运行我的代码。该程序希望用户输入12个月的降雨量。现在为month1year1输入1,month2year1输入1,其余10个月输入相同。因此,总降雨量为12,因为您输入了1*12,平均降雨量为每月的总降雨量,即12/12=1。所以你每个月的平均降雨量是1英寸,这是正确的。在最终代码中缺少了一个括号,但在我集成它时已经考虑到了。非常感谢,这工作做得很好