【问题标题】:Is there any way to create arrays in a loop in JAVA?有没有办法在 JAVA 中循环创建数组?
【发布时间】:2019-10-31 19:14:31
【问题描述】:

我试图创建对象,它的大小和数量由用户定义,但只有一个数组输出。有没有办法在循环中创建数组?

public class Somehthing {    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Scanner sc2 = new Scanner(System.in);
        Random rnd = new Random();
        System.out.println("How many array?:");

        for (int j = 0; j <= sc.nextInt(); j++) {
            System.out.println("Define array size:");
            int[] dizi = new int[sc2.nextInt()];
            for (int i = 0; i <= dizi.length - 1; i++) {
                int deger = rnd.nextInt(1000000);
                dizi[i] = deger;
                System.out.println(array[j]);
            }
        }
    }
}

【问题讨论】:

  • 看起来你想要一个二维数组。 int [][] array = new int[sc2.nextInt()][];
  • 顺便说一下i&lt;=array.length-1可以简化为i &lt; array.length,因为&lt;不会包含array.length
  • 你肯定不希望 for(int j=0;j&lt;=sc.nextInt();j++) - nextInt() 将在每次迭代之前被调用 - int arrayCount = sc.nextInt(); for (int j = 0; j &lt; arrayCount; j++)(另请注意:使用&lt;,而不是&lt;=
  • 你不需要 2 个 Scanners - 一个就足够了。
  • 只是我的看法:我不喜欢new int[sc2.nextInt()] 它在一行中做两个非平凡的操作;我更喜欢int dim = sc2.nextInt(); new int[dim]; 更易于阅读(IMO)和调试;我还会添加一些输入检查(负数?)

标签: java arrays loops createobject


【解决方案1】:

我不确定我是否理解正确,但如果你想创建 n 个数组,那么你所要做的就是使用一个新的数据结构来保存你的数组;比如ArrayList(你可以使用二维数组来存储信息,但是多维数组往往会变得非常复杂,非常快;这更简单。

所以需要稍微修改一下:

public static void main(String[] args) {


  Scanner sc = new Scanner(System.in);
  Scanner sc2 = new Scanner(System.in);  //I don't understand why you used a second scanner
  Random rnd= new Random();
  ArrayList<Integer[]> arrays = new ArrayList<>();  //you must import java.utils.ArrayList;
  System.out.println("How many array?:"); 

  for(int j=0;j<=sc.nextInt();j++){
     System.out.println("Define array size:");
     Integer[] array = new int[sc2.nextInt()];
     for(int i=0;i<=array.length-1;i++){
       int value=rnd.nextInt(1000000);
       array[i]= value;
       System.out.println(array[j]);
       }
     arrays.add(array); //You are adding this array into your List of arrays.
   }
}

记得将包装类 Integer() 与列表一起使用,原始类型将不起作用。如果您需要知道原因,请阅读 this 堆栈溢出 回答或 this 泛型教程

我没有花时间优化您的代码,因为我试图只解决您的问题/疑问。

【讨论】:

    【解决方案2】:

    二维数组可以工作:

    Scanner sc = new Scanner(System.in);
    Random rnd= new Random();
    
    System.out.println("How many array?:");
    int[][] array = new int[sc.nextInt()][];
    for(int j = 0; j < array.length; j++){
        System.out.println("Define array size:");
        array[j] = new int[sc.nextInt()];
        for(int i = 0; i < array[j].length; i++){
            array[j][i] = rnd.nextInt(1000000);
        }
        System.out.println(Arrays.toString(array[j]));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 2011-09-08
      • 2021-05-01
      • 1970-01-01
      • 2021-12-21
      • 2020-11-20
      相关资源
      最近更新 更多