微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法使用扫描仪来设置数组中的维数?

如何解决有没有办法使用扫描仪来设置数组中的维数?

我想要做的是根据用户输入创建一个包含多个组(数组行)的列表(数组维度)。 例如:

// get list number;
Scanner input = new Scanner(system.in);
System.out.println("How many lists do you want to create?");
int listNum = input.nextInt();

// listNum = 4
// create array with 4 dimensions;

// get  list size;
for (int i=0; i<listNum; i++) {
    System.out.println("How many entries are in list No."+(i+1)+" ?");
    // TBC
}

解决方法

以下是创建整数 jagged array 的示例:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("How many lists do you want to create? ");
    int listNum = input.nextInt();

    int[][] data = new int[listNum][];

    // get number of entries for each row
    for (int i=0; i<data.length; i++) {
        System.out.print("How many entries are in list No. "+(i+1)+" ? ");
        int numEntries = input.nextInt();
        data[i] = new int[numEntries];
    }

    // demonstrate that it worked:
    for (int i=0; i<data.length; i++) {
        for(int j=0; j<data[i].length; j++) {
            System.out.print(data[i][j] + " ");
        }
        System.out.println();
    }
} 

示例输出:

How many lists do you want to create? 3
How many entries are in list No. 1 ? 5
How many entries are in list No. 2 ? 7
How many entries are in list No. 3 ? 2
0 0 0 0 0 
0 0 0 0 0 0 0 
0 0
,

好吧,你可以做这样的事情,但这太糟糕了。假设最大为 4。

int dim = input.nextInt(); //4
Object wtfarray = getArray(dim,2);
putAvalueOnFirstJustForFun(wtfarray,dim,-99);
//throw new Exception("Please kill me");

/*wtfarray 
    
    [[[[-99,0],[0,0]],[[0,0]]],[[[0,0]]]]
*/


//...
void putAvalueOnFirstJustForFun(Object array,int dim,int value)
{
  switch(dim)
  {
    case 1:  {((int[])array)[0] = value; return;}
    case 2:  {((int[][])array)[0][0] = value; return;}
    case 3:  {((int[][][])array)[0][0][0] = value; return;}
    //...until your max    
    default: {((int[][][][])array)[0][0][0][0] = value;}
}

static Object getArray(int dimensions,int size)
{
  switch (dimensions)
  {
     case 1:  {return new int[size];}
     case 2:  {return new int[size][size];}
     case 3:  {return new int[size][size][size];}
     //...until your max    
     default: {return new int[size][size][size][size];}
   }
}

这东西很丑,请不要做。

,

假设您将维度与行混合在一起……那么您就可以开始了。只需捕获列(为您 listNum),然后使用另一个 int 变量捕获行。然后像往常一样创建数组。

int[][] customArray = new int[listNum][rowNum];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?