我如何让这个阵列结束?

时间:2011-05-06 14:15:48

标签: java

嘿,所以我有这个新任务,我必须编写一个程序,允许用户输入学生的姓名和成绩,并回馈最高的最低和平均。唯一的问题是班上最多有50名学生(或者表单中有),并且只有10名学生的姓名和成绩。如何在最后一个学生之后让阵列结束?

static final int MAX = 50;
public static void main(String[] args)
{
    int index, average;
    int highest = 0, student = 1;
    Scanner keyboard = new Scanner(System.in);
    String [] students = new String[MAX];
    int[] grades = new int[MAX];

    System.out.println("Please enter the name of the student and their test grade");
    System.out.print("Students: ");
    for(index=0; index<MAX; index++)
        {
            students[index] = keyboard.nextLine();
            student = student + index;
            if(students[index]=="Done"))
            {
                student = student - 1;
                continue;
            }

        }
    System.out.print("Grades: ");
    for(index=0; index<student; index++)
        grades[index] = keyboard.nextInt();
    averageMan(grades, student);
    for(index=0; index<student; index++)
        if(grades[index] < averageMan(grades, student))
            System.out.println(students[index] + " Your test grade was " +
                            "below the class average. Step it up.");
    for(index=0; index<student; index++)
        if(grades[index] > highest)
            highest = grades[index];
    System.out.println("The highest test grade in the class goes to " +
                    students[highest] + " with a grade of " + grades[highest]);
}

public static int averageMan(int[] g, int s)
{
    int index, sum = 0;
    int averages;
    for(index=0; index<s; index++)
        sum = sum + g[index];
    averages = sum / s;
    return averages;
}

}

8 个答案:

答案 0 :(得分:3)

使用集合,而不是数组。他们的api更有用。

阅读Collections Trail开始使用。

如果您想要一个数组的替代品,use a List,如果您想要唯一性,use a Set

答案 1 :(得分:1)

您可以循环收集学生详细信息,直到用户输入表明他们已完成输入详细信息的特定令牌。

编辑这看起来就像你要做的那样......但是continue会转到循环中的下一个项目。你想break不是吗?

答案 2 :(得分:1)

使用空字符串初始化students数组。同时使用grades初始化-1数组。在用于计算平均值/最高/最低值的循环中,检查空字符串和-1。

答案 3 :(得分:1)

尝试更改

student = student + index;
if(students[index]=="Done"))
{
  student = student - 1;
  continue;
}

为:

if(students[index]=="Done"))
{
  break;
}
student = student + 1;

然后,当学生的姓名输入为“完成”时,您将退出录入循环,变量student将包含输入的学生人数。

答案 4 :(得分:0)

1)嘿,你为什么这样做?

        if(students[index]=="Done"))
        {
            student = student - 1;
            continue;
        }

2)您可以将代码划分为更小的方法

3)您可以按照建议的人使用Collections API。

答案 5 :(得分:0)

最简单的解决方案是使用集合类,如java.util.ArrayList而不是数组。如果必须使用数组,也许每次添加新学生时都可以重新分配数组?此页面有一个如何执行此操作的示例 - How to resize an array in Java

答案 6 :(得分:0)

您的for循环有三个部分,中间部分解析为真/假条件。它可以很简单,就像你有或复杂,像这样:

for(index=0; index<MAX && !done; index++)

doneboolean,如果您检测到一个表示您想要停止的值,则该值为false。

答案 7 :(得分:0)