拆分数组Java

时间:2013-11-23 17:48:09

标签: java arrays

我制作了一个12x12阵列,但是我有一些问题让阵列做我想要的,我想将阵列分成1个值,例如阵列中的第一个位置。所以我可以让它对我来说更容易理解。我知道它更难,但对我来说似乎更简单。顺便说一句,这是一个游戏板。

MY ARRAY:

import java.util.Arrays;
import java.util.Random;
public class PlayingArea {
private String letters;
public char[][] grid;
public PlayingArea(String letters) {
    this.letters = letters;
}
public void populate() {
    int n = letters.length();
    grid = new char[12][12];

    Random r = new Random();
    for (int j = 0; j < grid.length; j++) {
        for (int i = 0; i < grid.length; i++) {
            grid[i][j] = letters.charAt(r.nextInt(n));
        }
    }
}

public String gridAsString() {
    StringBuilder sb = new StringBuilder();
    for (char[] letterRow : grid) {
        sb.append(Arrays.toString(letterRow)).append('\n');
    }
    return sb.toString();
}

}

        System.out.println("How many random letters to choose from would you like (3,4)");
    String letters = "";
    while (letters.length() < 4) {
        int region = input.nextInt();
        if (region == 4) {
            letters = "EFGH";
        } else if (region == 3) {
                letters = "EFG";
            } else {
                System.out.println("You inputed a wrong value, try again...");
            }
        }
public class Cell {
    cell = new char[c];
    if (regions == 4) {
        c = (char)(r.nextInt(4) + 'E';
     }
    if (regions == 3) {
        c = (char)(r.nextInt(3) + 'E';
     }
}

1 个答案:

答案 0 :(得分:2)

在我看来,数组可能不是数据的最佳抽象。这是什么意思?让我试着让它更具体:

我有一维数组。该数组的“契约”如下:

  • 索引位置0:当前使用的数组长度(或,活动使用的值的数量)
  • 索引位置1:数组中当前选定的值(绝对位置)
  • 索引位置2到101:数据空间

您根据此合同编写的代码缺乏简洁性,可能不会自我记录并且容易出错。如果尝试从错误计算的索引位置1(旨在包含元数据)收集数据,则不会发生运行时错误。

这个合同的一个非常优越的抽象是编写一个类而不是试图让一切都在数组中工作:

class DataVector {
    private static final int MAX_VECTOR_SIZE = 100;

    private int dataLength;
    private int selectedPos;
    private int[] values;

    public DataVector() {
        dataLength = 0;
        selectedPos = -1; // by default, no data is selected
        values = new int[MAX_VECTOR_SIZE - 1];
    }

    :
    :
 }

您不仅可以编写方法,使您的代码更容易理解和更易于阅读(setSelectedPositionTo(int pos)等方法,但您的应用程序不那么脆弱。如果您需要基于此简单创建数据结构像网格这样的模型也很容易......数组可能适用于此:

DataVector[] myGrid = new DataVector[GAME_GRID_SIZE];  // creates array object
for (DataVector dv : myGrid) dv = new DataVector();    // initializes array with
                                                       // new DataVector objects

访问数据可能就像使用您为DataVector编写的方法一样简单,例如:

int currValue = myGrid[selectedRow].getValue(position);

TL; DR:如果您使用数组来描述多种数据,那么通过分解数据种类和编写自定义值类,您可能会受益匪浅。这就是面向对象编程的全部内容。