2

因此,我正在学习 Java 入门课程,制作一个成绩计算器,并增加了在这组条件下调整成绩的任务:

如果学生完成了奖金作业:

  • 考试 1 成绩是:
    • 如果考试 2 的成绩高于原始考试 1 的成绩,则为考试 2 成绩的 80%,或
    • 原始考试 1 级。
  • 考试 2 成绩是:
    • 如果考试 3 的成绩高于原始考试 2 的成绩,则为考试 3 成绩的 80%,或
    • 原始考试 2 级。

总是首先对考试 1 进行修改。

我首先在考试 1 年级尝试了这个,尝试分配g1ng2 * 0.8if (g2 * 0.8) > g1,并赋予它 else 的值g1。我很难看到如何g1n没有被初始化,因为在我看来我刚刚列出的条件是详尽的。

以下是我的代码的相关部分。是什么赋予了?

// declare variables
int g1;
int g2;
int g3;
char grade;
double g1n;
double g2n;
double avg;
String bonus;

// get input
System.out.println("***************  Grade Computer *************");
System.out.println("Enter the student's first name: ");
String first = input.next();
System.out.println("Enter the student's middle initial: ");
String mid = input.next();
System.out.println("Enter the student's last name: ");
String last = input.next();
System.out.println("Enter EXAM 1 grade: ");
g1 = input.nextInt();
System.out.println("Enter EXAM 2 grade: ");
g2 = input.nextInt();
System.out.println("Enter EXAM 3 grade: ");
g3 = input.nextInt();
System.out.println("Was bonus work done? [yes/no]: ");
bonus = input.next();
System.out.println(g1 + " " + g2 + " " + g3 + " " + bonus);

// adjust exam scores if necesssary
if (bonus.equals("yes")) {
    if (((double)g2 * 0.8) > g1) {
        g1n = ((double)g2 * 0.8);
    } else {
        g1n = (double)g1;
    }
}

编辑:

我把它改成了这个,但仍然收到相同的消息......

if (bonus.equals("yes")) {
    if (((double)g2 * 0.8) > g1) {
        g1n = ((double)g2 * 0.8);
    }
    if (((double)g3 * 0.8) > g2) {
        g2n = ((double)g3 * 0.8);
    }
} else {
    g1n = (double)g1;
    g2n = (double)g2;
}

// compute average
avg = (g1n + (double)g2 + (double)g3) / 3;
4

3 回答 3

3

如果bonus不等于"yes",则g1n永远不会设置。

于 2013-01-17T00:30:28.380 回答
1

唯一g1n设置的位置是在if (bonus.equals("yes"))子句中。如果bonus不等于"yes",则g1n永远不会设置。您现有的else提供了一个else到第二个if。您不能将不存在的变量添加到另一个变量。

g1n如果不等于 ,您可以跟踪您的程序"yes"g1n除非 ,否则它不会在任何地方为 赋值bonus.equals("yes")

if通过在子句之后说,来解决这个问题else { g1n = 0; }

于 2013-01-17T00:36:00.937 回答
0

那是因为 g1n 不能被初始化。

if (bonus.equals("yes")) {  // if bonus is yes

    if (((double)g2 * 0.8) > g1) {

        g1n = ((double)g2 * 0.8);
    } 
        else {

            g1n = (double)g1; 
    }

    // compute average
    avg = (g1n + (double)g2 + (double)g3)/3;
}

如果红利不是“是”,g1n 仍然可以为空。因此,只需将平均值计算到您的 if 中即可。

于 2013-01-17T00:35:52.437 回答