简单ArrayList程序JAVA
我试图解决这个问题: 在模块1030Y中定义具有属性studentID和标记的班级学生。Student类还必须包含一个默认构造函数以及一个构造函数,用于使用用户定义的值、每个属性的mutator和accessor方法以及一个display方法初始化Student类型的对象。编写一个测试程序,维护学生对象的ArrayList(ID在701-799范围内,标记在0.0到100.0范围内)。该程序将允许用户输入每个学生的学生id号和分数。完成所有输入后,程序将显示得分最高和最低的学生的ID简单ArrayList程序JAVA,java,arraylist,Java,Arraylist,我试图解决这个问题: 在模块1030Y中定义具有属性studentID和标记的班级学生。Student类还必须包含一个默认构造函数以及一个构造函数,用于使用用户定义的值、每个属性的mutator和accessor方法以及一个display方法初始化Student类型的对象。编写一个测试程序,维护学生对象的ArrayList(ID在701-799范围内,标记在0.0到100.0范围内)。该程序将允许用户输入每个学生的学生id号和分数。完成所有输入后,程序将显示得分最高和最低的学生的ID while
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的代码,不是我的,我在指出哪里不正确。我的解释不清楚,很高兴我能帮忙。祝你好运