简体   繁体   English

java - 从两个一维 arrays 创建二维数组(矩阵)

[英]java - creating 2D array (matrix) from two 1D arrays

I seem to have suffered a ham/yam/three-bean-casserole-induced post-Christmas brain-freeze because I can't get this simple code to work.我似乎遭受了火腿/山药/三豆砂锅引起的圣诞节后大脑冻结,因为我无法让这个简单的代码工作。

Given给定

public Object[] suite = {"diamonds","hearts","clubs","spades"};
public Object[] rank  = {"J","Q","K","A"};

How do I programmatically achieve:我如何以编程方式实现:

Object[][] card = {{"J","diamonds"},{"Q","diamonds"},{"K","diamonds"},{"A","diamonds}
                  ,{"J","hearts"},  {"Q","hearts"},  {"K","hearts"},  {"A","hearts"}
                  ,{"J","clubs"},   {"Q","clubs"},   {"K","clubs"},   {"A","clubs"}
                  ,{"J","spades"},  {"Q","spades"},  {"K","spades"},  {"A","spades"}
                  };

with

public Object[][] someMagic( Object[] suite, Object[] rank) {
    Object[][] retVal = new Object[suite.length][rank.length]
    // insert magic here
    return retVal;
}

Yes everything needs to be Object, Object[] or Object[][] due to upstream constraints ie.是的,由于上游限制,所有内容都必须是 Object、Object[] 或 Object[][]。 TestNG @DataProvider TestNG @DataProvider

TIA, TIA,

Still-struggling Steve仍在挣扎的史蒂夫

A couple of nested loops does the magic but the dimensions of the retVal are different:几个嵌套循环可以发挥作用,但retVal的尺寸不同:

public Object[][] someMagic(Object[] suite, Object[] rank) {
    Object[][] retVal = new Object[suite.length * rank.length][2];
    int i = 0;
    for (Object s : suite) {
        for (Object r : rank) {
            retVal[i++] = new Object[]{r, s};
        }
    }
    return retVal;
}

Test:测试:

Object[] suite = {"diamonds","hearts","clubs","spades"};
Object[] rank  = {"J","Q","K","A"};
System.out.println(Arrays.deepToString(someMagic(suite, rank)));

Output (not pretty-printed): Output(印刷不漂亮):

[[J, diamonds], [Q, diamonds], [K, diamonds], [A, diamonds], [J, hearts], [Q, hearts], [K, hearts], [A, hearts], [J, clubs], [Q, clubs], [K, clubs], [A, clubs], [J, spades], [Q, spades], [K, spades], [A, spades]] [[J,钻石],[Q,钻石],[K,钻石],[A,钻石],[J,红心],[Q,红心],[K,红心],[A,红心],[ J,梅花],[Q,梅花],[K,梅花],[A,梅花],[J,黑桃],[Q,黑桃],[K,黑桃],[A,黑桃]]

Maybe this is the solution也许这就是解决方案

public class SomeMagic {

    public Object[] suite = {"diamonds","hearts","clubs","spades"};
    public Object[] rank  = {"J","Q","K","A"};
    
    public Object[][] someMagic( Object[] suite, Object[] rank) {

        Object[][] retVal = new Object[suite.length][rank.length];
        
            for(int s = 0; s < suite.length; s++) {
                for(int r = 0; r < rank.length; r++) {
                    System.out.println("s: " + s + ", r: " + r +  ", card[s][r]: " + suite[s] + ", " + rank[r]);
                    retVal[s][r] = new Object[] {suite[s], rank[r]}; 
                }
            }

        return retVal;
        
    } // someMagic
    
    
    public void doIt() {
        Object[][] card = someMagic(suite, rank);
        
        for(int s = 0; s < card.length; s++) {
            System.out.println("s: " + s + "-----------------------------");
            for(int r = 0; r < card[s].length; r++) {
                Object[] item = (Object[]) card[s][r];
                System.out.println("s: " + s + ", r: " + r +  ", card[s][r]: " + item[0] + ", " + item[1]);
            }
        }
        
    } // doIt
    
    
    public static void main(String[] args) {
        SomeMagic self = new SomeMagic();
        self.doIt();
    }
    
}

Btw: Get well and recover quickly :)顺便说一句:康复并迅速恢复:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM