简单的ArrayList程序-JAVA

时间:2015-04-30 21:06:07

标签: java arraylist

我正试图解决这个问题:

  

在模块1030Y中定义具有属性studentID和标记的Student类。 Student类还必须包含一个默认构造函数以及一个构造函数,用于初始化Student类型的对象,其中包含用户定义的值,每个属性的mutator和accessor方法以及显示方法。编写一个测试程序,用于维护Student对象的ArrayList(ID范围为701-799,标记范围为0.0到100.0)。该程序将允许用户输入学生ID号和每个学生的标记。完成所有输入后,程序将显示具有最高和最低分数的学生的ID。

出于某种原因,我试图获得学生最低和最高分的部分不起作用。

这是我的代码:
Student.java:

package Number5;

public class Student {
private int studentID;
private float mark;

public Student()
{
    studentID = 0;
    mark = 0;
}

public Student(int id, float marks)
{
    this.studentID = id;
    this.mark = marks;
}

public void setID(int id)
{
    this.studentID = id;
}

public int getID()
{
    return studentID;
}

public void setMark(float marks)
{
    this.mark = marks;
}

public float getMark()
{
    return mark;
}

public void display()
{
    System.out.println("Student ID: "+getID());
    System.out.println("Marks: "+getMark());
}
}

testStudent.java:

package Number5;
import java.util.ArrayList;
import java.util.Scanner;

public class testStudent {

public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<Student>();
    int id=0; float mark=0;
    Scanner input = new Scanner(System.in);

    do
    {
        System.out.print("Enter the student ID: ");
        id = input.nextInt();
        System.out.print("Enter the marks: ");
        mark = input.nextFloat();
        students.add(new Student(id,mark));
    }
    while(id != 0 || mark != 0);

    int smallest = 9999, largest = -9999;

    for(int i=0; i<students.size(); i++)
    {
        while(smallest > students.get(i).getMark())
        {
            smallest = students.get(i).getID();
        }

        while(largest < students.get(i).getMark())
        {
            largest = students.get(i).getID();
        }
    }

    System.out.println("Smallest is "+smallest);
    System.out.println("Largest is "+largest);
}
}

程序在读取用户输入后停止。直到for循环它才会发生。

4 个答案:

答案 0 :(得分:3)

您的问题似乎是在使用while语句检查时进入无限循环的事实。像这样使用if语句:

for(int i=0; i<students.size(); i++)
    {
        if(students.get(i).getMark() < smallest)
        {

            smallest = students.get(i).getID();
        }

        if(students.get(i).getMark() > largest)
        {

            largest = students.get(i).getID();
        }
    }

但是,这会让您遇到另一个问题,因为您要将markid进行比较。您需要针对mark检查mark的值,然后分配id。像这样:

int largestMark = 0;
inst smallestMark = 9999;
for(int i=0; i<students.size(); i++)
    {
        if(students.get(i).getMark() < smallestMark)
        {
            smallestMark = students.get(i).getMark();
            smallest = students.get(i).getID();
        }

        if(students.get(i).getMark() > largestMark)
        {
            largestMark = students.get(i).getMark();
            largest = students.get(i).getID();
        }
    }

答案 1 :(得分:1)

使用:

if(smallest > students.get(i).getMark())
{
    smallest = students.get(i).getMark();
}

if(largest < students.get(i).getMark())
{
    largest = students.get(i).getMark();
}

您正在比较标记,但随后分配了ID。要跟踪标记最多或最少的学生,您可以添加:

studentWithMostMarks = students.get(i).getId()

答案 2 :(得分:1)

您需要一个额外的变量:

目前,您将最佳/最差学生ID存储在smallest / largest,同时将其与mark进行比较。你需要这样的东西:

smallestId;
smallestMark;//initialize biig
largestId;
largestMark;//initialize looow

答案 3 :(得分:1)

这部分代码可能导致无限循环:

for(int i=0; i<students.size(); i++)
{
    while(smallest > students.get(i).getMark())
    {
        smallest = students.get(i).getID();
    }

    while(largest < students.get(i).getMark())
    {
        largest = students.get(i).getID();
    }
}

你必须改变它:

for(int i=0; i<students.size(); i++)
{
    if(smallest > students.get(i).getMark())
    {
        smallest = students.get(i).getID();
    }

    if(largest < students.get(i).getMark())
    {
        largest = students.get(i).getID();
    }
}