二维数组重写

时间:2015-03-09 17:01:19

标签: java arrays

嘿,这段代码工作正常,但很难阅读。我正在寻找一种更好的方法。

public void printArray(String[/*row*/][/*column*/] twoDiArray) {
    if (twoDiArray.length == 2) {
        for (int i = 0; i < twoDiArray[0].length; i++) {
            //prints attribute name and value
            attributeNameAndValue(twoDiArray[0][i],twoDiArray[1][i]);
        }
    } else {
        System.out.println("Does not fit format standards :: 2d array :: two rows max :: first row name :: second row value");
    }
}

我非常不喜欢的部分是if语句和for循环中的长度调用。有没有更好的方法来做到这一点,还是只是一个草率的java语言部分。

5 个答案:

答案 0 :(得分:2)

您拥有名称 - 值对,如果您的名称是唯一的,则应使用Map<String, Integer>代替。否则,创建自己的类,例如Attribute并使用List<Attribute>

public class Attribute {

    private final String name;
    private final int value;

    public Attribute(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public int getValue() {
        return value;
    }

}

这为第二维提供了编译时安全性。你的代码看起来像这样:

public void printArray(List<Attribute> attributes) {
    for (Attribute attribute : attributes) {
        attributeNameAndValue(attribute.getName(), attribute.getValue());
    }
}

答案 1 :(得分:0)

您可以使用新变量来保存twoDiArray.length的值,并使用下面的新变量。

答案 2 :(得分:0)

这当然可以清理一下。其他人提到的不同方法会有更简洁的代码。你有这样的行和列,这有点奇怪。扭转订单也会使事情更清晰:

public void printArray(String[/*row*/][/*column*/] twoDiArray){

    if(twoDiArray.length!=2){
        System.out.println("Does not fit format standards :: 2d array :: two rows max :: first row name :: second row value");
        return;
    }
    int len = twoDiArray[0].length;
    for(int i = 0; i<len.length; i++){
        //prints attribute name then value
        attributeNameAndValue(twoDiArray[0][i],twoDiArray[1][i]);
    }
}

另一件事是将attributeNameAndValue更改为接受itwoDiArray以及#34; neater&#34;调用

答案 3 :(得分:0)

另一种检查数组的方法

public void printArray(String[/*row*/][/*column*/] twoDiArray){
  assert twoDiArray.length == 2;
  for(int i=0; i<twoDiArray[0].length; i++){
    attributeNameAndValue(kvp[i][0], kvp[i][1]);
  }
}

答案 4 :(得分:0)

为了提高代码可读性,应用java代码约定(http://www.oracle.com/technetwork/java/codeconvtoc-136057.html)。 引入变量行和列(行数和列数)

public void printArray(String[/*row*/][/*column*/] twoDiArray) {
    int rows = twoDiArray.length;
    if (rows != 2) {
        System.out.println("Does not fit format standards :: 2d array :: two rows max :: first row name :: second row value");
        return;
    }
    int columns = twoDiArray[0].length;
    for (int column = 0; column < columns; column++) {
        //prints attribute name then value
        attributeNameAndValue(twoDiArray[0][column], twoDiArray[1][column]);
    }
}