初学者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被添加到平均值中,我无法弄清楚简单的解决方案是什么。谢谢!
答案 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 */ }
}
还有其他方法可以实现这一目标,但需要发生的事情的顺序是:
编辑:使用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);
}
}