通过从用户那里给出两个数字来制作数组,并在 Java 中打印数组

Making an array by giving two number from user and print the array in Java

提问人:Zeynab Moghaddas 提问时间:11/16/2023 最后编辑:deHaarZeynab Moghaddas 更新时间:11/16/2023 访问量:60

问:

我想从用户那里给出两个数字并创建一个数组。然后打印数组。我应该如何在java中完成此任务?

这是我的代码。我给出数字 5 和 25。但它不能正常工作。

我想要的输出:[6,7,....,23,24]

系统输出,输入最小值:5,最大值:25

[0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我的代码:

import java.util.Arrays;
import java.util.Scanner;

public class JavaApplication18 {

    public static void main(String[] args) {
        Scanner reader = new Scanner (System.in);
        System.out.print("min value: ");
        int min = reader.nextInt();

        // Ask the user to input the minimum value
        System.out.print("max value: ");
        int max = reader.nextInt();
    
        for (int a = min; a < max; a++) {
            int [] userArray = new int[a]; 
            System.out.print(Arrays.toString(userArray));
        }
    }
}

我想要的值 5 和 25 输出:[6,7,...,23,24]

Java 数组 打印 范围 用户输入

评论

0赞 Old Dog Programmer 11/16/2023
一般来说,应该有一个解释,而不仅仅是一个例子,应该做什么。不要指望一个例子,而解释没有得到正确的理解。

答:

1赞 deHaar 11/16/2023 #1

首先,您不是在创建单个数组,而是在每次迭代中创建一个数组,其中线在循环内。这解释了您不需要的系统输出,它显示了几个数组......int [] userArray = new int[a];for

您必须在循环外部创建具有正确大小的数组,然后将其填充到内部,计算正确的索引和值。

下面是一个示例方法/函数:

public static void printArray(int min, int max) {
    // create an array with the amount of numbers between from and to
    int[] array = new int[max - min - 1];
    // iterate from minimum to maximum (each exclusively)
    for (int i = min + 1; i < max; i++) {
        // and put the number at indexes starting by 0
        array[i - min - 1] = i;
    }
    // print the array
    System.out.println(Arrays.toString(array));
}

使用示例值调用它,例如main(…)

public static void main(String[] args) {
    printArray(5, 25);
}

将产生以下(期望的)输出:

[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

评论

0赞 Zeynab Moghaddas 11/16/2023
为什么 5 在数组中?我们希望数字在范围内。我的意思是最小值之后和最大值之前的数字。6,....,24
0赞 Zeynab Moghaddas 11/16/2023
我无法理解这段代码,工作在做什么?数组[i - min] = i;
0赞 Reilas 11/16/2023
@ZeynabMoghaddas,看起来像错别字;从 min + 1 开始 i
0赞 deHaar 11/16/2023
@ZeynabMoghaddas 对不起,那是我的错误......我刚刚更正了算法并输出!表达式意味着您将值放在数组的索引处。array[i - min - 1] = iii - min - 1
1赞 Reilas 11/16/2023 #2

"...这是我的代码。我给出数字 5 和 25。但它不能正常工作。

我想要的输出:[6,7,....,23,24] ...”

在循环之前声明 userArray,并在循环之后打印

此外,数组应初始化为最大值 − 最小值 − 1 的长度。
变量 a 应从 min + 1 开始。
并且,利用附加变量 i 进行 userArray 访问。

int [] userArray = new int[max - min - 1];
for (int i = 0, a=min + 1; a<max; i++, a++) {
    userArray[i] = a;
}
System.out.print(Arrays.toString(userArray));

输出

min value: 5
max value: 25
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

这是关于数组的 Java 教程。
数组(Java 教程>学习 Java™ 语言>语言基础知识)。

2赞 Amol Gharpure 11/16/2023 #3

更好、更干净的方法是使用 Streams API

System.out.println(IntStream
                      .range(min + 1, max)
                      .boxed()
                      .collect(Collectors.toList())
                   );

IntStream :- 支持顺序和并行聚合操作的基元整值元素序列。这是 Stream 的 int 原始专用化。

range() :-static IntStream range(int startInclusive, int endExclusive)

boxed() :- 返回一个 Stream,该流由该流的元素组成,每个元素装箱为一个 Integer。

评论

0赞 Amol Gharpure 11/16/2023
谢谢。做出了改变。
0赞 Reilas 11/16/2023
你也可以跳过拳击。.int[] a = IntStream.range(min + 1, max).toArray()
0赞 Amol Gharpure 11/16/2023
最终目标是打印数字。
0赞 Reilas 11/16/2023
哦,对了。这样,您可以跳过 Collectors 调用,只需在盒装调用中使用 toList