简单ArrayList程序JAVA

简单ArrayList程序JAVA,java,arraylist,Java,Arraylist,我试图解决这个问题: 在模块1030Y中定义具有属性studentID和标记的班级学生。Student类还必须包含一个默认构造函数以及一个构造函数,用于使用用户定义的值、每个属性的mutator和accessor方法以及一个display方法初始化Student类型的对象。编写一个测试程序,维护学生对象的ArrayList(ID在701-799范围内,标记在0.0到100.0范围内)。该程序将允许用户输入每个学生的学生id号和分数。完成所有输入后,程序将显示得分最高和最低的学生的ID while

我试图解决这个问题:

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

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

while(largest < students.get(i).getMark()) {
  largest = students.get(i).getID();
}
出于某种原因,我试图在学生中获得最低和最高分数的部分没有起作用

这是我的密码:
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());
}
}
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);
}
}
testStudent.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());
}
}
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);
}
}
包装编号5;
导入java.util.ArrayList;
导入java.util.Scanner;
公共课测试学生{
公共静态void main(字符串[]args){
ArrayList students=新ArrayList();
int id=0;浮点数=0;
扫描仪输入=新扫描仪(System.in);
做
{
系统输出打印(“输入学生ID:”);
id=input.nextInt();
系统输出打印(“输入标记:”);
mark=input.nextFloat();
添加(新学生(id,标记));
}
而(id!=0 | | mark!=0);
int最小值=9999,最大值=9999;
for(int i=0;i students.get(i).getMark())
{
最小=students.get(i).getID();
}
while(最大
程序在读取用户输入后立即停止。它甚至直到for循环才开始运行。

使用:

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

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

该程序将允许用户输入每个学生的学生id号和分数。完成所有输入后,程序将显示得分最高和最低的学生的ID

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

while(largest < students.get(i).getMark()) {
  largest = students.get(i).getID();
}
while(最小的>students.get(i).getMark()){
最小=students.get(i).getID();
}
while(最大
您应该将您的分数分配给最小或最大的,而不是Id。


您还可以跟踪得分最高或最低的
学生的索引号,然后从
学生的
数组列表中获取id和分数您的问题似乎是,当您使用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();
        }
    }

您需要一个附加变量:

当前,您将最佳/最差学生id存储在
最小的
/
最大的
,同时将其与
标记进行比较。你需要像这样的东西:

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

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

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.get(i).getMark())
{
最小=students.get(i).getID();
}
while(最大
您必须更改它:

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();
    }
}
for(int i=0;i students.get(i).getMark())
{
最小=students.get(i).getID();
}
if(最大
我不知道,你告诉我们。怎么了?很明显我的密码可能是错的,对吧?如果我确实知道我不会问的地方,@RaGe
#define unde
@downvoter你能解释一下为什么吗?这样我以后就不会犯同样的错误了。作为java初学者是不是错了?代码中的问题不是ArrayList。即使在这种情况下while循环可以工作,我还是用if语句代替它,因为它使代码更易于阅读谢谢,同意。只是指出了错误的部分,还没有优化它。你能解释一下为什么投反对票吗?在我看来,我们需要指出OP的逻辑错误并帮助他解决,代码优化使代码更可读,工作效率更高,这里它是可选的。这并不能解决问题。你没有更改任何代码。它不会打印出带有最高或最低标记的ID。你也在将标记与ID进行比较。@BlackHatSamurai这是OP的代码,不是我的,我在指出哪里不正确。我的解释不清楚,很高兴我能帮忙。祝你好运