为什么写int num = r.nextInt(899) + 100;而不写 int num = r.nextInt(999) ;
时间: 2023-04-03 18:05:16 浏览: 156
这是因为 r.nextInt(899) 生成的随机数范围是 0 到 898,再加上 100 就是 100 到 998 的随机数范围,而 r.nextInt(999) 生成的随机数范围是 0 到 998,再加上 1 就是 1 到 999 的随机数范围,不符合要求。
相关问题
定义学生类覆盖Object中的方法实现Comparable接口 分数 20 作者 万静 单位 北京化工大学 定义一个学生类Student,成员变量包括:姓名,生日,学号,学校;重写方法toString,equals,hashCode;实现接口Comparable,按照学号大小进行比较;定义构造方法。 代码形式如下: public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); int num=in.nextInt(); Student[] studentArray = new Student[num]; for(int i=0;i<num;i++) { String name=in.next(); int year=in.nextInt(); int month=in.nextInt(); int day=in.nextInt(); String studentId=in.next(); String school=in.next(); studentArray[i]=new Student(name,year,month,day,studentId,school); } Arrays.sort(studentArray); for(Student s:studentArray) System.out.println(s); } } class Student implements Comparable { //给出Student的定义 } 输入格式: 第一行输入学生人数。其他各行每行输入一个学生的姓名,出生年月日,学号,学号,用空格分隔。 输出格式: 按照学号从小到大排序的学生信息,每个学生信息一行。 输入样例: 例如: 3 李翔 2002 10 9 202019001 北京化工大学 张凯 2002 11 23 202019015 北京化工大学 汪海 2002 7 5 202019012 北京化工大学 输出样例: 例如: Student[name=李翔, birthday=2002-10-09, studentId=202019001, school=北京化工大学] Student[name=汪海, birthday=2002-07-05, studentId=202019012, school=北京化工大学] Student[name=张凯, birthday=2002-11-23, studentId=202019015, sc
好的,下面是符合要求的代码:
```
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
Student[] studentArray = new Student[num];
for (int i = 0; i < num; i++) {
String name = in.next();
int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();
String studentId = in.next();
String school = in.next();
studentArray[i] = new Student(name, year, month, day, studentId, school);
}
Arrays.sort(studentArray);
for (Student s : studentArray) {
System.out.println(s);
}
}
}
class Student implements Comparable<Student> {
private String name;
private Date birthday;
private String studentId;
private String school;
public Student(String name, int year, int month, int day, String studentId, String school) {
this.name = name;
this.birthday = new Date(year, month, day);
this.studentId = studentId;
this.school = school;
}
@Override
public String toString() {
return "Student[name=" + name + ", birthday=" + birthday +
", studentId=" + studentId + ", school=" + school + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return Objects.equals(studentId, student.studentId);
}
@Override
public int hashCode() {
return Objects.hash(studentId);
}
@Override
public int compareTo(Student other) {
return this.studentId.compareTo(other.studentId);
}
class Date {
private int year;
private int month;
private int day;
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return year + "-" + String.format("%02d", month) + "-" + String.format("%02d", day);
}
}
}
```
在上面的代码中,我们定义了一个名为Student的类,并实现了Comparable接口。该类有四个属性name、birthday、studentId和school,分别表示学生的姓名、生日、学号和学校。我们还覆盖了Object中的toString、equals和hashCode方法,以便在打印学生对象时更方便地查看其属性,以及在比较学生对象时使用学号进行判断。最后,我们实现了Comparable接口中的compareTo方法,该方法将比较两个学生的学号,并返回结果。
在上面的代码中,我们还定义了一个内部类Date,用于表示学生的生日,并覆盖了其toString方法,以便在打印学生对象时更方便地查看其生日。
在main方法中,首先读入学生人数,然后读入每个学生的信息,并创建相应的学生对象。接着,我们使用Arrays.sort方法对学生数组进行排序,并打印排序后的结果。
需要注意的是,在读入学生信息时,我们使用了next方法读入字符串,并使用nextInt方法读入整数。此外,我们还使用了String类中的format方法来格式化日期字符串,以便输出格式符合要求。
int n = sl.nextInt(); int[] num = new int[n]; for (int i = 0; i < n; i++) { num[i] = sl.nextInt(); } int max = num[0], min = num[0]; for (int i = 1; i < n; i++) { if (num[i] > max) { max = num[i]; } if (num[i] < min) { min = num[i]; } } System.out.println(max - min); 在代码上加个n的范围1 <= n <= 1000)
可以在代码中加入一些判断来限制输入的n值在1到1000之间。修改后的代码如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sl = new Scanner(System.in);
int n;
do {
System.out.println("请输入序列长度n(1 <= n <= 1000):");
n = sl.nextInt();
} while (n < 1 || n > 1000);
int[] num = new int[n];
for (int i = 0; i < n; i++) {
System.out.println("请输入序列第" + (i+1) + "个数:");
num[i] = sl.nextInt();
}
int max = num[0], min = num[0];
for (int i = 1; i < n; i++) {
if (num[i] > max) {
max = num[i];
}
if (num[i] < min) {
min = num[i];
}
}
System.out.println("序列的最大跨度值为:" + (max - min));
}
}
```
这个修改过的代码在读取n的时候,会要求用户输入满足1 <= n <= 1000的值,如果输入的值不符合要求,就会提示用户重新输入,直到输入符合要求为止。同时,在读取序列元素的时候,也会提示用户输入每个元素的值。完成后,程序会输出序列的最大跨度值。
阅读全文