【问题标题】:java code not working as I am expectingjava代码没有像我期望的那样工作
【发布时间】:2016-12-01 02:32:58
【问题描述】:

我真的很难让我的 java 代码工作。我编写了一个程序,该程序确定用户输入后每个分数将获得的分数,并找到最大和最小分数。该程序成功地确定了哪个分数属于哪个年级,但是一旦我实现了一段代码,它试图从分数中找到最大的数字,它似乎不起作用,我不确定它是什么!

这里是代码...

import java.util.Scanner;

public class Grade
 {
 public static void main(String[] args)
 {
        int Agrade=0; //different variables used throughout the code
        int Bgrade=0;
        int Cgrade=0;
        int Dgrade=0;
        int Fgrade=0;
        int count=0;




    Scanner in = new Scanner(System.in);   //name of Scanner 

    System.out.println("Please enter the exam grades one after the other ");
    System.out.println("Please enter a negative number at the end of the grade list to control the flow and then press enter :");
    int score = in.nextInt(); //stores numbers inputted

    System.out.println("Please enter the grades again for the largest number: ");
    double largest = in.nextDouble();


    while (in.hasNextDouble()){
       double input = in.nextDouble();
       if (input > largest) {
          largest = input;
       }
    }



 while(score>0)   //start while loop
     {
       count++;
 if(score>=70 && score<=100)
        Agrade++;
    else if(score>=60 && score<=69)
        Bgrade++;
    else if(score>=50 && score<=59)
        Cgrade++;
    else if(score>=40 && score<=49)
        Dgrade++;
    else if(score>=0 && score<=39)
        Fgrade++;
    score = in.nextInt();
 } //end while



 System.out.println("Total number of grades :"+ count);
 System.out.println("The largest number :"+ largest);
 System.out.println("The number of As :"+ Agrade);
 System.out.println("The number of Bs :"+ Bgrade);
 System.out.println("The number of Cs :"+ Cgrade);
 System.out.println("The number of Ds :"+ Dgrade);
 System.out.println("The number of Fs :"+ Fgrade);

 } // end main
} // end class

谢谢!

【问题讨论】:

标签: java loops while-loop storage


【解决方案1】:

这可能是一个练习,所以只会给出这个想法。 您的 while 循环似乎很好,只需在它之前声明两个变量。 一个用于保存以最低数字初始化的最高等级,另一个用于以最高数字初始化的最低等级。

score = in.nextInt();

if ( score > highest  ) { highest = score;}
if ( score < lowest ) { lowest = score }

祝你好运。

【讨论】:

  • 为了 OP 福利lowest number == Integer.MIN_VALUE
【解决方案2】:

问题很可能是您在每次运行 while 循环时都声明了变量 input。相反,像这样声明变量:

double input;

并在 while 循环之前执行此操作。然后在 while 循环中将该行替换为:

input = in.nextDouble();

如果这不是问题,那可能是您布置代码的方式。第二个以while (score&gt;0) 开头的while 循环应该是int score = in.nextInt() 行的位置。将它放在第一个while 循环之后意味着它在那个while 循环之后执行。

附带说明一下,像Agrade 这样的公共变量应该用驼峰式书写,其中第一个字母小写,下一个单词的字母大写。这将使您的变量

int aGrade = 0;
int bGrade = 0;

等等。这只是适当的形式,不应影响您的程序。此外,您可能应该在程序顶部声明分数和输入,因为您在循环中使用它们。这也是很好的形式和组织。它看起来像这样:

int score;
double input;

【讨论】:

    【解决方案3】:

    检查 cmets 上的代码以便理解。

    主类:

    import java.util.Scanner;
    
    public class Grade
    {
        public static void main ( String [ ] args )
        {
            /**
             * This gradesCount represent the A,B,C,D,E,F counts
             */
            int[] gradesCount = {0,0,0,0,0,0}; 
            double inputScore = 0;  
            double bestScore = 0;
            int total = 0;
    
            @SuppressWarnings ( "resource" )
            Scanner in = new Scanner(System.in);
    
            System.out.println ( "If you want to end, enter a negative number" );
            System.out.print("Enter score: ");
    
            do
            {
                inputScore = in.nextDouble ( );
                //validation for the first iteration
                if(inputScore < 0 || inputScore > 100) break;
                System.out.print("Enter score: ");
                //Add to corresponding grade count
                if(inputScore>=70 && inputScore<=100) gradesCount[0]++;
                if(inputScore>=60 && inputScore<=69) gradesCount[1]++;
                if(inputScore>=50 && inputScore<=59) gradesCount[2]++;
                if(inputScore>=40 && inputScore<=49) gradesCount[3]++;
                if(inputScore>=0 && inputScore<=39) gradesCount[4]++;
                //Add one to total
                total++;
                //check best score
                if(inputScore > bestScore) bestScore = inputScore;
            }//This pattern check if its number between 0-100
            while ( in.hasNext ( "[0-9][0-9]?|100" ) );
    
    
    
            System.out.println ( "Negative number or not valid input. Exited." );
    
            System.out.println("Total number of grades :"+ total);
            System.out.println("The best score :"+ bestScore);
            System.out.println("The number of As :"+ gradesCount[0]);
            System.out.println("The number of Bs :"+ gradesCount[1]);
            System.out.println("The number of Cs :"+ gradesCount[2]);
            System.out.println("The number of Ds :"+ gradesCount[3]);
            System.out.println("The number of Fs :"+ gradesCount[4]);
    
    
        } 
    }
    

    输入/输出:

    If you want to end, enter a negative number
    Enter score: 5
    Enter score: 10
    Enter score: 15
    Enter score: 20
    Enter score: 33
    Enter score: 99
    Enter score: 100
    Enter score: 44
    Enter score: -3
    Negative number or not valid input. Exited.
    Total number of grades :8
    The best score :100.0
    The number of As :2
    The number of Bs :0
    The number of Cs :0
    The number of Ds :1
    The number of Fs :5
    

    文档:

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2019-12-12
      相关资源
      最近更新 更多