用Java Code丢失一些简单的东西

时间:2013-10-03 22:33:46

标签: java

初学者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被添加到平均值中,我无法弄清楚简单的解决方案是什么。谢谢!

5 个答案:

答案 0 :(得分: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语句,但仍能满足需要发生的正确顺序。

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

不要对sentinel值执行计算。为else添加条件以阻止其发生。

else if (student_grade != 999)

另外,考虑为此sentinel值定义一个常量。在课堂上:

public static final int END = 999;

以后:

while (student_grade != END)

else if (student_grade != END)

答案 3 :(得分: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对最终维护你的代码的精神病患者意味着什么。如果你的工作不顺利,他会知道你住在哪里并追捕你。

还要查看尤达的条件。如果你是新人并养成习惯,它将为你节省大量的痛苦。

答案 4 :(得分: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);
}
}