【问题标题】:How do I generate objects randomly in java?如何在java中随机生成对象?
【发布时间】:2021-09-09 15:38:31
【问题描述】:

我有一个名为“Student”的抽象类和两个子类“Graduate”和“Undergraduate”,它们都有相同的参数。

我想随机创建 10 个 Student 对象,一些来自“Graduate”,一些来自“Undergraduate”类。

我想为所有创建的对象打印 displayStudent() 方法,我一直在纠结如何随机生成 10 个学生,所以他们都是随机的毕业生和本科生。

public abstract class Student {
    private int ID;
    private double GPA;
    
    public Student(int ID, double GPA) {
        this.ID = ID;
        this.GPA = GPA;
    }
    
    public int getID() {
        return ID;
    }

    public double getGPA() {
        return GPA;
    }
    
    public abstract String getLevel();

    
    public abstract String getStatus();
    
    public final String displayStudent() {
        return getLevel() + " ID>> " + getID() + ", GPA>> " + getGPA() + ", Status>> " + getStatus();
    }

} 


    public class Graduate extends Student{
    
    public Graduate(int ID, double GPA) {
        super(ID, GPA);
    }
    @Override
    public String getLevel() {
        return "graduate";
    }

    @Override
    public String getStatus() {
        if( getGPA() >= 3) {
            return "honor";
        } else if (getGPA() >= 2 && getGPA() <= 3) {
            return "good";
        } else {
            return "probation";
        }
    }
}
 

public class Undergraduate extends Student {
    public Undergraduate(int ID, double GPA) {
        super(ID, GPA);
    }

    @Override
    public String getLevel() {
        return "undergraduate";
    }
    
    @Override
    public String getStatus() {
        if( getGPA() >= 3) {
            return "honor";
        } else if (getGPA() >= 2 && getGPA() <= 3) {
            return "good";
        } else if( getGPA() > 0 && getGPA() < 2) {
            return "probation";
        } else {
            //for any number that is not in the range of the GPA
            return "invalid GPA!";
        }
    }
    
}
 

【问题讨论】:

  • 使用 java.util.Random 获取随机数并填写 ID/GPA 等字段,根据返回的值构建您的逻辑(我把这个留给你)...
  • 我知道如何生成随机数,但我不知道如何让它在研究生和本科生之间随机选择。顺便感谢您的帮助!
  • 我给你一个提示......你会如何使用 java.util.Random 来表示头和尾?现在,您将如何使用 java.util.Random 来表示研究生和本科生?

标签: java object oop inheritance random


【解决方案1】:

试试这个。

  • 使用三元运算符?: 是关键。
    • exp ? a : b 表示如果exp 为真,则执行a,否则执行b
  • 我使用循环索引+1 作为 id。
  • 如果布尔值为真,则为研究生,否则为本科。
  • 双精度乘以4 得到 GPA。
Random r = new Random();

List<Student> students = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    students.add(r.nextBoolean() ?
            new Graduate(i+1, r.nextDouble() * 4) :
            new Undergraduate(i+1, r.nextDouble() * 4));
}

注意,如果您将 displayStudent() 方法更改为 toString() 像这样

@Override
public String toString() {
    return getLevel() + " ID>> " + getID() + ", GPA>> "
            + getGPA() + ", Status>> " + getStatus();
}

您可以直接打印对象而无需调用任何方法。

您可能需要格式化 GPA 以消除不必要的精度。查看String.format

【讨论】:

  • 很明显,这是一个学生提出的问题……给他最终的解决方案是一种不好的方法(当然,从学习的角度来看)……
  • 通常我会同意。但在这种情况下,OP 已经给出了重要的代码并承认他们无法弄清楚这部分。
猜你喜欢
  • 1970-01-01
  • 2015-12-02
  • 2014-05-13
  • 2019-08-02
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多