2015-03-31 84 views
0

我想执行一个名为AverageRainfall的程序。大部分的输入效果很好(开始时我的while语句很好),但变量monthRain下有多个月,并且monthRain的while语句在各个月份不起作用,只有初始输入命令正在服务没有目的。执行程序时,额外的输入命令会导致逻辑错误java

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

这是整个代码。

+0

可以发布整个代码,以便我可以测试它吗? – 2015-03-31 05:03:55

+0

是发布完整的代码。很难猜测。但我认为最近发生的事情是totalRain + = monthRain;不在循环中,这就是所有月份都没有考虑到的原因 – Yantraguru 2015-03-31 05:19:45

+0

@Kognizant我会如何将它放在循环中? – LizzySmit 2015-03-31 05:42:16

回答

0

您使用不必要的括号。此外,您的代码中还存在一些逻辑缺陷。我修复了你的代码。请参考以下代码:

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"); 

} 
} 
+0

最终代码中缺少一个大括号,但在集成它时已经考虑到了这一点。非常感谢,完美的工作 – LizzySmit 2015-03-31 06:09:48

0

每当用户输入一个月的降雨时,你可以做的就是增加Rain的总数。然后,一旦他完成输入数据,就可以做平均。

`import 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"); 

} 

} `

+0

使用代码时,我仍然遇到同样的问题,它说它在两年内只下了一英寸。 – LizzySmit 2015-03-31 05:27:27

+0

我在System.out.println中修正了一些东西,第一个应该是“Total Rain”。你使用什么输入? – 2015-03-31 05:29:36

+0

如果你现在执行代码并输入1,所有月份,你会得到总雨= 12,平均下雨= 1 – 2015-03-31 05:33:56