2013-11-23 2 views
-2

Я сделал массив 12x12, но у меня есть некоторые проблемы, из-за чего массив делает то, что я хочу, я хочу разделить массив на 1 значение для первого места в массиве, например. Поэтому я могу сделать это более понятным для меня. Я знаю, что это сложнее, но для меня это кажется более простым. Кстати, для доски для игры.Разбиение массива Java

МОЙ 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'; 
    } 
} 
+2

Я не вижу здесь 2-мерного массива. Какой у Вас вопрос? –

+2

Кроме того, что означает «разделение массива на 1 значение для первого места в массиве»? Пример ввода, пример вывода. –

+0

Я имею в виду, поэтому я могу сравнить значения как отдельные лица ... – Tommon

ответ

2

Мне кажется, что массивы, вероятно, не лучшая абстракция для ваших данных. Что я имею в виду? Позвольте мне попытаться сделать это более конкретным:

У меня есть одномерный массив. «Контракт» для этого массива выглядит следующим образом:

  • Позиция индекс 0: в настоящее время используется длина массива (или, число значений в активном использовании)
  • индекс позиция 1: выбранное в данный момент значения в массив (абсолютное положение)
  • позиции индекса 2 THRU 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 

Acc эссинга данные могут быть столь же легко, как с помощью метода вы написанную для DataVector, такие как:

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

TL; DR: Если вы используете массивы, чтобы описать более чем один вид данных, то вы, вероятно, в значительной степени выигрывают, выбирая типы данных и записывая собственный класс значений. Это то, о чем идет объектно-ориентированное программирование.

Смежные вопросы