如何在java中创建数字在1-50范围内的随机int数组



我是java新手,我有一个关于如何创建一个数字在1-50 范围内的随机数组方法的问题

我需要给他数组的大小,他应该根据我给他的大小和1-50 的数组元素创建一个数组

我尝试了这个代码,但它永远不适用于我

public class NewClass {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter the number ");
int r = input.nextInt();
int[] list = new int[r];
for (int i=0; i<10; i++){
int n = (int)(Math.random()*50 + 1);
list[i] = n;
System.out.println(list[i] + " ");
}
}

您的for循环应该是
for (int i = 0; i < r; i++)

这是我肯定会使用流的地方。它们从Java8开始就存在了,每个人都应该熟悉它们。即使是那些Java编程的新手。

Random r = new Random();
int nElements = 10;
int maxElement = 50;
List<Integer> nums = r.ints(nElements, 1, maxElement+1).boxed().sorted()
.collect(Collectors.toList()); 
System.out.println(nums);

这是解释。

  • r.ints的第一个元素是数量。接下来的两个是startending范围。由于该范围是排他性的,因此必须添加1以包含可能的maxElement
  • Boxed((将int映射到要收集到List中的Integer对象
  • Sorted((可以实现您所期望的功能
  • 收集器将它们放入List

您应该创建方法来以模块化的方式实现这一点。您可以做的其他改进是使用Random::nextInt来消除乘法和强制转换。下面是一个示例程序:

import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the size of the array: ");
int r = input.nextInt();
int[] list = new int[r];
init(list);
print(list);
}
static void init(int list[]) {
Random random = new Random();
for (int i = 0; i < list.length; i++) {
list[i] = random.nextInt(50) + 1;
}
}
static void print(int list[]) {
for (int i : list) {
System.out.print(i + " ");
}
}
}

样本运行:

Enter the size of the array: 3
4 1 38 

[Update]发布以下代码以满足OP对元素进行排序的要求(在下面的评论中提到(:

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the size of the array: ");
int r = input.nextInt();
int[] list = new int[r];
init(list);
System.out.println("Original list:");
print(list);
System.out.println("nSorted list:");
Arrays.sort(list);
print(list);
}
static void init(int list[]) {
Random random = new Random();
for (int i = 0; i < list.length; i++) {
int n = (int) (Math.random() * 50 + 1);
list[i] = random.nextInt(50) + 1;
}
}
static void print(int list[]) {
for (int i : list) {
System.out.print(i + " ");
}
}
}

样本运行:

Enter the size of the array: 3
Original list:
27 5 37 
Sorted list:
5 27 37 

所以我在您的代码中看到了两个问题:

  1. 你没有下课。所以只需在代码中添加一个}
  2. 如果您想填充整个数组,而不仅仅是前10个元素,请将for循环条件更改为i<list.length(如果数组长度小于10,则还会得到IndexOutOfBoundsException(

希望我能帮助你;(

试试这个:

Random rand = new Random();
int my_num = 1 + rand.nextInt(50);

最新更新