错误的计数结果

时间:2013-11-19 22:33:49

标签: java

我正在编写一个计算每个班级(音乐,艺术,戏剧,运动)学生总数的计划。如果我有3个学生,其中两个参加艺术课,一个参加音乐课,结果应该是:艺术-2和音乐-1。我得到了错误的结果。

评论:音乐类代表第一,艺术代表2。

结果:

插入参加人数: 3 在课堂上插入学生: 2 班上的学生:2 总计:1 班上的学生:4 总计:0 在课堂上插入学生: 2 班上的学生:2 总计:3 班上的学生:4 总计:1 在课堂上插入学生: 1 班上的学生:1 总计:1 班上的学生:4 总计:2

我的代码:

import java.util.Scanner; 公共类GroupActivity {     public static void main()

{
  Scanner GActivity=new Scanner(System.in);

  System.out.println("Insert numbers of participants:");
  int participantNo= GActivity.nextInt();//Insert numbers of participants


  int music= 1;int art=2; int theatre= 3; int sport= 4; // Representation of each class by numbers.
  int countM=0; //This variable contains the number of the participants in music class.
  int countA=0; //This variable contains the number of the participants in art class.
  int countT=0; //This variable contains the number of the participants in theatre class.
  int countS=0; //This variable contains the number of the participants in sport class.

  for(int i=0;i<participantNo;i++)
  {
         System.out.println("Insert student in class:");
         int p= GActivity.nextInt();// // Representation of student by number.

         if(p==music)
         {
            countM++;
            System.out.println("student in class:"+music);
            System.out.println("Total:"+countM++);
         }
          else if(p==art)
         {
            countA++;
            System.out.println("student in class:"+art);
            System.out.println("Total:"+countA++);
         }
          else if(p==theatre)
         {
            countT++;
            System.out.println("student in class:"+theatre);
            System.out.println("Total:"+countT++);

        }
         else
            countS++;
            System.out.println("student in class:"+sport);
            System.out.println("Total:"+countS++);
        }

    }

  }

2 个答案:

答案 0 :(得分:1)

else
    countS++;
    System.out.println("student in class:"+sport);

你在那里缺少牙箍!您的代码有效地运作如下:

else {
    countS++;
}
System.out.println("student in class:"+sport);

else之后添加大括号来解决问题。

另外,正如泰勒在评论中指出的那样,你可以两次增加音乐课程计数器,而不是每增加一名学生一次。

编辑:因为显然只是说它不够清楚,这里有一些代码可以证明:

countS++; //countS is incremented by one
System.out.println("student in class:"+sport);
System.out.println("Total:"+countS++); //countS is incremented by one AGAIN

所以你让你的学生加倍。但是,由于countS++评估为countS,因此第一次执行此操作时打印消息显示正确 - 但countS的值仍然会更改,从而导致下一次迭代产生错误结果。< / p>

答案 1 :(得分:0)

不要在输出语句中增加内容

System.out.println("Total:"+countS++);

如答案中所述,在print语句中无意中有两个增量。这样做几乎总是一个坏主意。这就是为什么

 int i = 0;  // the value of i is zero
 System.out.println(i++); // prints the value zero, but the value of i is one