如何在Java中将ArrayList <string>转换为int []

时间:2018-01-04 01:37:18

标签: java arraylist

我读过Bert Bates和Katie Sierra的书Java并且有问题。

  

任务:制作游戏&#34; Battleship&#34;通过使用ArrayList实现3个类。

     

错误:类型中的方法setLocationCells(ArrayList&lt; String&gt;)   SimpleDotCom不适用于参数(int [])

据我所知,ArrayList只能保存对象,而不会保留灵长类动物。因此,将位置列表(这些是int)移交给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;
    }
}

2 个答案:

答案 0 :(得分:2)

  

在Java中将ArrayList转换为int []

基本解决方案的原因

以下是在Java中将ArrayList<String>转换为int[]的简单示例。我认为最好给你一个不特定问题的例子,这样你就可以观察这个概念并学习。

一步一步

如果我们在下面定义了ArrayList<String>

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

然后,初学者最简单的解决方案是遍历每个列表项并添加到新数组。这是因为列表的元素是String类型,但您需要输入int

我们首先创建一个与List

相同大小的新数组

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

然后我们遍历列表

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

然后在循环内部,我们首先将String转换为int

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

但是有一个问题。我们并不总是知道String将包含数值。 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));

最终结果

如果我们合并“Step by Step”中的所有代码,我们会得到以下内容

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,但可能会发生,例如阅读输入。

答案 1 :(得分:0)

我无法看到您在代码中调用setLocationCells(ArrayList<String>)的位置,但如果唯一的问题是将整数存储到ArrayList中,则有一个解决方案:

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

确实,您不能将原始类型用作泛型,但您可以使用Java包装器类型(在本例中为java.lang.Integer)。