2013-08-03 3 views
0
public class NewDeck { 

    public static void main(String[] args){ 

     String[] suits = new String[] {"Clubs", "Diamonds", "Spades", "Hearts"}; 

     String[] faces = new String[] {"Ace", "King", "Queen", "Jack"}; 

     String[][] deck = new String[][] {{},{}}; 

     int a = 0; 
     int b = 0; 

     for(String x: suits){ 

      a ++; 

      for(String y: faces){ 


       deck[a][b] = {{x, y}}; // THIS IS THE LINE I NEED HELP WITH 

       b++; 

     System.out.println(deck); 

      } 

     } 

    } 

} 

Что я ожидаю, чтобы напечатать это:прилагая индексов в многомерных массивов в Java

{{"Clubs, "Ace"}{"Diamonds", "Ace"}{"Spades", "Ace"}{"Hearts", "Ace"} 
{"Clubs, "King"}{"Diamonds", "King"}{"Spades", "King"}{"Hearts", "King"} 
{"Clubs, "Queen"}{"Diamonds", "Queen"}{"Spades", "Queen"}{"Hearts", "Queen"} 
{"Clubs, "Jack"}{"Diamonds", "Jack"}{"Spades", "Jack"}{"Hearts", "Jack"} 

И когда я хочу, чтобы напечатать:

deck[4][0] 

Я ожидаю, что печатать:

"Clubs" 

Я знаю, что я очень близко, это только одна строка, я считаю, что я делаю Неправильно, поэтому я прокомментировал строку, которая вызывает проблему. Если кто-то знает, что положить, а не:

deck[a][b] = {{x, y}}; 

Было бы очень признательно. Спасибо за любые ответы на заранее

+1

Массивы фиксированного размера. Вы должны указать размер массива при его создании. –

ответ

2
public static void main(String args[]) { 
    String suits[] = new String[] {"Clubs", "Diamonds", "Spades", "Hearts"}; 
    String faces[] = new String[] {"Ace", "King", "Queen", "Jack"}; 
    String deck[][] = new String[suits.length * faces.length][2]; 

    int i=0; 

    for (String suit : suits) { 
     for (String face : faces) { 
      deck[i][0] = suit; 
      deck[i][1] = face; 
      i++; 
     } 
    } 
} 
+0

Работал отлично. Я не знаю, почему я не мог думать об этом. Есть только одна вещь, на которую я не уверен на 100%. Где у вас есть [suits.length * faces.length] [2]; Что означает [2]? –

+0

@DennisCallanan, что каждая из записей 'suits.length * faces.length' снова представляет собой массив, который может содержать ровно две строки – PoByBolek

1
deck[a][b] = {{x, y}}; 

Заменить это что-то вроде этого:

deck[index][0]=x; 
deck[index][1]=y; 

Также deck[4][0] обыкновение давать вам правильные результаты. Помните, что массив имеет индексированные элементы, начиная с 0 и заканчивая размером массива-1.

System.out.println(deck); Вы не сможете печатать значения массива, просто распечатав массив.
Вышеприведенный оператор просто распечатает хэш-код объекта массива. Помните, что это массив, а не список или набор. Вам нужно перебрать массив и распечатать элементы внутри него.

0

Думаю, для этого вам понадобится класс Card.

public class NewDeck { 
    public static class Card { 
    public final String suit; 
    public final String face; 
    public Card(String suit, String face) { 
     this.suit = suit; 
     this.face = face; 
    } 
    public String toString() { 
     return "{\"" + suit + "\", \"" + face + "\"}"; 
    } 
    } 
    public static void main(String[] args) { 
    String[] suits = new String[] {"Clubs", "Diamonds", "Spades", "Hearts"}; 
    String[] faces = new String[] {"Ace", "King", "Queen", "Jack"}; 

    Card[][] deck = new Card[suits.length][faces.length]; 

    int a = 0; 
    int b = 0; 
    for(String x: suits){ 
     b = 0; 
     for(String y: faces){ 
     deck[a][b] = new Card(x, y); 
     b++; 
     } 
     a++; 
    } 
    } 
} 
Смежные вопросы