我正试图解决这个问题:
在模块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循环它才会发生。
答案 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();
}
}
但是,这会让您遇到另一个问题,因为您要将mark
与id
进行比较。您需要针对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();
}
}