0

初学者Java学生在这里..我正在尝试创建一个学生平均成绩程序,该程序在添加“999”的哨兵值时停止。这是我所拥有的:

import  

javax.swing.JOptionPane;

public class average_grades
{
public static void main (String []args)
{
    int num_grades = 0;
    int total_grade = 0;
    int average_grade = 0;
    int student_grade = 0;
    while (student_grade != 999)
        {
            student_grade = Integer.parseInt(JOptionPane.showInputDialog(null, "What is the student's grade?"));
            if (student_grade < 0)
                {
                    JOptionPane.showMessageDialog(null,"Invalid Entry");
                }
            else
                {
                    num_grades++;
                    total_grade = total_grade + student_grade;
                    average_grade = total_grade/num_grades;
                }

        }
JOptionPane.showMessageDialog(null, "Average: " + average_grade);
}
}

我遇到的问题是 999 被添加到平均值中,我无法弄清楚简单的解决方案是什么。谢谢!

4

5 回答 5

3

您的问题是else语句中的代码(将值添加到平均值)在检查值是否为哨兵之前运行。

一个简单的修复可能是:

while (true) {
    student_grade = Integer.parseInt(JOptionPane.showInputDialog(null, "What is the student's grade?"));
    if (student_grade == 999) break;
    else if (student_grade < 0) { /* your code */ }
    else { /* your code */ }
}

还有其他方法可以实现这一点,但是需要发生的顺序:

  • 获取用户输入的学生成绩值
  • 检查哨兵值;如果是这样,打破
  • 检查值是否有效;如果没有,请重复步骤 2-3
  • 为平均值计算增加价值

编辑:break要使用无法使用的约束来解决此问题(根据@baash05 在评论中的请求),请执行以下操作:

student_grade = Integer.parseInt( /* your code to get entry */ );
while (student_grade != 999) {
    if (student_grade < 0) { /* your code */ }
    else { /* your code */ }
    student_grade = Integer.parseInt( /* your code to get entry */ );
}

此代码不使用 break 语句,但仍满足需要发生的正确顺序。

于 2013-10-03T22:37:43.717 回答
1

这不是 Java 问题。使用 while 是一个重复问题。您可以将您的逻辑基于以下伪代码:

read grade;
while (grade != 999) {
   if (grade < 0) 
      println("Invalid Entry");
   else {
      num_grades++;
      total_grade = total_grade + grade;
      average_grade = total_grade/num_grades;
   }
   read grade;
}

print(average_grade);

这是基于上述 p 代码的程序:

import javax.swing.JOptionPane;

public class AverageGrades {
    public static void main(String[] args) {
        int num_grades = 0;
        int total_grade = 0;
        int average_grade = 0;
        int student_grade;
        student_grade = Integer.parseInt(JOptionPane.showInputDialog(null, "What is the student's grade?"));
        while (student_grade != 999) {        
            if (student_grade < 0) {
                JOptionPane.showMessageDialog(null, "Invalid Entry");
            } else {
                num_grades++;
                total_grade = total_grade + student_grade;
                average_grade = total_grade / num_grades;
            }
            student_grade = Integer.parseInt(JOptionPane.showInputDialog(null, "What is the student's grade?"));
        }
        JOptionPane.showMessageDialog(null, "Average: " + average_grade);
    }
}
于 2013-10-03T22:45:18.533 回答
0

不要对标记值执行计算。为您添加一个条件以else阻止这种情况发生。

else if (student_grade != 999)

此外,请考虑为此标记值定义一个常量。在课堂里:

public static final int END = 999;

然后:

while (student_grade != END)

else if (student_grade != END)
于 2013-10-03T22:36:26.003 回答
0

如此亲密的伙伴

public static void main (String []args)
{
    int num_grades = 0;
    int total_grade = 0;
    int average_grade = 0;
    int student_grade;
    while (999 != (student_grade = Integer.parseInt(JOptionPane.showInputDialog(null, "What is the student's grade?"))  ))
        {

            if (student_grade < 0)
                {
                    JOptionPane.showMessageDialog(null,"Invalid Entry");
                }
            else
                {
                    num_grades++;
                    total_grade = total_grade + student_grade;
                    average_grade = total_grade/num_grades;
                }

        }
JOptionPane.showMessageDialog(null, "Average: " + average_grade);
}

我只是将请求移到了 while 条件中。它将在运行 while 的主体之前测试输入的值

其他人指出了一些您可以解决的小问题。就像 999 作为常数。好主意。幻数(代码中的原始数字)通常是个坏主意。考虑一下 999 对最终会维护您的代码的精神病患者意味着什么。如果你不让他的工作变得轻松,他会知道你住在哪里并追捕你。

还检查了尤达条件。如果您是新手并养成习惯,它将为您省去很多痛苦。

于 2013-10-03T22:47:54.817 回答
0

一个简单的解决方案是在 else 条件中添加 if 条件。您可以在以下代码中找到更改:

    import javax.swing.JOptionPane;

public class average_grades
{
public static void main (String []args)
{
    int num_grades = 0;
    int total_grade = 0;
    int average_grade = 0;
    int student_grade = 0;
    while (student_grade != 999)
        {
            student_grade = Integer.parseInt(JOptionPane.showInputDialog(null, "What is the student's grade?"));
            if (student_grade < 0)
                {
                    JOptionPane.showMessageDialog(null,"Invalid Entry");
                }
            else
                {
                    if(student_grade != 999)
                    {
                    num_grades++;
                    total_grade = total_grade + student_grade;
                    average_grade = total_grade/num_grades;
                    }
                    else
                    {
                        break;
                    }

                }

        }
JOptionPane.showMessageDialog(null, "Average: " + average_grade);
}
}
于 2013-10-03T22:49:22.347 回答