Вопрос:

Как преобразовать ArrayList <String> в int [] в Java

java arraylist

230 просмотра

2 ответа

415 Репутация автора

Я прочитал книгу Берт Бейтс и Кэти Сьерра Ява, и у меня возникла проблема.

Задача: сделать игру "Морской бой" с 3 классами с помощью ArrayList.

Ошибка: метод setLocationCells (ArrayList ) в типе SimpleDotCom не применим для аргументов (int [])

Я понимаю, что ArrayList будет содержать только объекты, а не примитивы. Поэтому передача списка местоположений (которые являются целыми) в ArrayList не будет работать, потому что они являются приматами. Но как я могу это исправить?

Код:

public class SimpleDotComTestDrive {

    public static void main(String[] args) {

        int numOfGuesses = 0;

        GameHelper helper = new GameHelper();

        SimpleDotCom theDotCom = new SimpleDotCom();

        int randomNum = (int) (Math.random() * 5);

         int[] locations = {randomNum, randomNum+1, randomNum+2};

         theDotCom.setLocationCells(locations);

        boolean isAlive = true;

        while(isAlive) {    

            String guess = helper.getUserInput("Enter the number");

            String result = theDotCom.checkYourself(guess);

            numOfGuesses++;

            if (result.equals("Kill")) {
                isAlive = false;
                System.out.println("You took " + numOfGuesses + "  guesses");
            }
        }
    }
}

public class SimpleDotCom {

    private ArrayList<String> locationCells;

    public void setLocationCells(ArrayList<String> loc) {
        locationCells = loc;
    }

    public String checkYourself(String stringGuess) {

        String result = "Miss";

        int index = locationCells.indexOf(stringGuess);

        if (index >= 0) {
            locationCells.remove(index);

            if(locationCells.isEmpty()) {
                result = "Kill";
            } else {
                result = "Hit";
            }
        }
        return result;
    }
}

public class GameHelper {

    public String getUserInput(String prompt) {
        String inputLine = null;
        System.out.print(prompt + " ");
        try {
            BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
            inputLine = is.readLine();
            if (inputLine.length() == 0)
                return null;
        } catch (IOException e) {
            System.out.println("IOException:" + e);
        }
        return inputLine;
    }
}
Автор: invzbl3 Источник Размещён: 04.01.2018 01:37

Ответы (2)


0 плюса

59 Репутация автора

Я не могу видеть, куда вы вызываете setLocationCells(ArrayList<String>)в своем коде, но если единственная проблема заключается в сохранении целых чисел в ArrayListесть решение:

ArrayList<Integer> myArray = new ArrayList<Integer>();
myArray.add(1);
myArray.add(2);

Это правда, что вы не можете использовать примитивные типы в качестве обобщенных, но вы можете использовать типы-оболочки Java (в данном случае, java.lang.Integer).

Автор: Lorenzo Notaro Размещён: 04.01.2018 01:50

2 плюса

2499 Репутация автора

Решение

конвертировать ArrayList в int [] в Java

Причина основного решения

Вот простой пример преобразования ArrayList<String>в int[]в Java. Я думаю, что лучше дать вам пример, не относящийся к вашему вопросу, чтобы вы могли наблюдать за концепцией и учиться.

Шаг за шагом

Если у нас есть ArrayList<String>определенный ниже

List<String> numbersInAList = Arrays.asList("1", "2", "-3");

Тогда самым простым решением для новичка будет цикл по каждому элементу списка и добавление в новый массив. Это потому, что элементы списка являются типом String, но вам нужен тип int.

Мы начинаем с создания нового массива того же размера, что и список

int[] numbers = new int[numbersInAList.size()];

Затем мы перебираем список

for (int ndx = 0; ndx < numbersInAList.size(); ndx++) {

Затем в цикле мы начинаем отливку Stringвint

int num = Integer.parseInt(numbersInAList.get(ndx));

Но есть проблема. Мы не всегда знаем, что строка будет содержать числовое значение. Integer.parseIntвыдает исключение по этой причине, поэтому нам нужно разобраться с этим делом. Для нашего примера мы просто распечатаем сообщение и пропустим значение.

try {
   int num = Integer.parseInt(numbersInAList.get(ndx));
} catch (NumberFormatException formatException) {
   System.out.println("Oops, that's not a number");
}

Мы хотим, чтобы это новое numбыло помещено в массив, поэтому мы поместим его в массив, который мы определили

numbers[ndx] = num;

или объедините последние два шага

numbers[ndx] = Integer.parseInt(numbersInAList.get(ndx));

Конечный результат

Если мы объединим весь код из «Шаг за шагом», мы получим следующее

List<String> numbersInAList = Arrays.asList("1", "2", "-3");
int[] numbers = new int[numbersInAList.size()];

for (int ndx = 0; ndx < numbersInAList.size(); ndx++) {
   try {
      numbers[ndx] = Integer.parseInt(numbersInAList.get(ndx));
   } catch (NumberFormatException formatException) {
      System.out.println("Oops, that's not a number");
   }
}

Важные соображения

Обратите внимание, что есть более элегантные решения, такие как использование потоков Java 8. Кроме того, обычно не рекомендуется хранить intsкак Strings, но это может произойти, например, чтение ввода.

Автор: Matt Goodrich Размещён: 04.01.2018 01:53
Вопросы из категории :
32x32