Печать значения ArrayList Integer

Я работаю над небольшой игрой, в которой по сути есть кучи монет, и вы должны взять несколько монет из кучи, после чего программа распечатает получившиеся кучи в формате:

Pile 1: ****
Pile 2: *****
Pile 3: **

У меня есть список массивов, в котором хранятся все эти значения:

List<Integer> coins = new ArrayList<>();
[4,5,2]

Но я не могу понять, как заставить его правильно печатать *.

Как я могу написать этот код, чтобы распечатать * для каждого значения в элементе. IE 4 *, если значение элемента равно 4?

Вот мой текущий метод:

static void printGameState(){
    for(int i = 0; i <= coins.size()-1; i++){
        int k = i+1;
        System.out.print("Pile " + k + ": ");
        for(int j = 0; j <= coins.indexOf(i); j++){
            System.out.print("*");
        }
    }
}

person Alkarin    schedule 13.02.2016    source источник


Ответы (3)


Вместо использования этого условия:

j <= coins.indexOf(i);

Используйте это условие:

j < coins.get(i);

Попытайся:

for(int i = 0; i <= coins.size()-1; i++) {
    int k = i+1;

    System.out.print("Pile " + k + ": ");
    for(int j = 0; j < coins.get(i); j++) {
        System.out.print("*");
    }

    System.out.println();
}

Ты получишь:

Pile 1: ****
Pile 2: *****
Pile 3: **
person Community    schedule 13.02.2016
comment
Спасибо, это было очень полезно. Если бы я хотел вычесть значение одного из элементов массива, как бы я это сделал? coins.set(index, coins.get(index) - numCoins); это правильно? - person Alkarin; 13.02.2016

Вы должны использовать ‹ вместо ‹=. Кроме того, вы должны иметь возможность использовать get(i) для получения значения по индексу i.

static void printGameState(){
    for(int i = 0; i < coins.size(); i++){
        int k = i+1;
        System.out.print("Pile " + k + ": ");
        for(int j = 0; j < coins.get(i); j++){
            System.out.print("*");
        }
    }
}

Вы также можете сделать его немного чище, сформировав другой метод для печати *, например:

public void ast(int n){
    for(int i=0; i<n; i++){
        System.out.print("*");
    }
}

Тогда содержимое цикла printGameState будет

int k = i+1;
System.out.print("Pile " + k + ": ");
ast(coins.get(i));
person Calvin P.    schedule 13.02.2016

Вы должны просмотреть значения различных стеков, обратившись к массиву coins[i] вместо того, чтобы использовать количество стеков в качестве высоты стека:

static void printGameState(){
    for(int i = 0; i < coins.size(); i++) {
        // Build the coin stack
        String coinStack = "";
        for(int j = 0; j < coins.get(i); j++) {
            coinStack += "*";
        }

        // And output it
        System.out.println("Pile " + (i + 1) + ": " + coinStack);            
    }
}
person TimoStaudinger    schedule 13.02.2016
comment
coins не относится к типу int[], поэтому coins[i] не будет работать - person Calvin P.; 13.02.2016