2016-03-14 45 views
0

這裏是一個程序類似於沉沒的戰艦遊戲從書頭第一個java。編譯後,我得到的錯誤:「字符串不能轉換爲ArrayList錯誤」和^指針指向行我有兩個不同的文件與主方法和其他一個單獨的類。這裏有什麼問題。字符串不能轉換爲ArrayList <String>錯誤

主要方法類

import java.util.Scanner; 
public class SimpleDotComTestDrive{ 

    public static void main(String[] args){ 

     SimpleDotCom dot=new SimpleDotCom(); 
     boolean repeat=false; 
     String[] locations={"2","3","4"}; 
     dot.setLocationCells(locations); //^ where compiler points the error 
     Scanner input=new Scanner(System.in); 
     System.out.println("Lets Start"); 

     while(repeat==false) { 
     System.out.println("Type your guess"); 
     String userGuess=input.nextLine(); 
     String result=dot.checkYourSelf(userGuess); 
     System.out.println(result); 

     if(result=="kill") { 
      repeat=true; 
      break; 
     } 
     } 
    } //close main 
} //close test class 

單獨保存類,這是該計劃的一部分:

import java.util.ArrayList; 

public class SimpleDotCom { 
    private ArrayList<String>locationCells; 

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

    public String checkYourSelf(String userGuess) { 
     String result="miss"; 
     int index = locationCells.indexOf(userGuess); 
     if(index>=0) { 
     locationCells.remove(index); 

     if(locationCells.isEmpty()) { 
      result="kill"; 
     } 
     else { 
      result="hit"; 
     } 
    } 
    return result; 
    } //close check yourself method 
} //close simple class 
+2

數組和ArrayList是不同的東西 – Eran

+1

'setLocationCells'需要一個'ArrayList',但是你傳遞一個數組。 –

+0

你正試圖設置List =「String」(或類似的),而「String」不是一個List,所以不能分配給它,只添加它作爲一個元素,使用.add(「String」 )方法 – Stultuske

回答

2

你所得到的錯誤,因爲setLocationCells()方法接受一個ArrayList<String>和你傳遞一個字符串數組通過這樣做:

dot.setLocationCells(locations); 

Yo ü應該要麼更換你的方法接受String[]代替ArrayList<String>或更改您的代碼如下:

dot.setLocationCells(new ArrayList<String>(Arrays.asList(locations)); 
+0

您實際上不需要'String' - 類型可以由鑽石操作員推斷。 –

+0

@Andy Turner是的,我同意。 'new ArrayList <>(...)'將起作用。感謝您指出了這一點。 – user2004685

0

你不能String[] locations={"2","3","4"};,然後將其解析到要求ArrayList方法setLocationCells(ArrayList<String> locs){

因此,有更多的方式:

  1. 轉換數組列出與:new ArrayList<String>(Arrays.asList(locations);
  2. 定義,而不是ArrayList中:

    ArrayList<String> list = new ArrayList<String>() {{ 
        add("2"); 
        add("3"); 
        add("4"); 
    }}; 
    
  3. 改變你的方法根本:

    public void setLocationCells(String[] locs){ 
        Collections.addAll(locationcells, locs); 
    } 
    
+0

3.不完全。雖然'Arrays.asList'的返回值的簡單類名是'ArrayList',它實際上是'java.util.Arrays.ArrayList'而不是'java.util.ArrayList'。您需要將它複製到一個新的ArrayList中,如1. –

+0

2.這不是有效的Java。 –

+0

我已經嘗試將我的方法更改爲:public void setLocationCells(String [] locs){0} 0} locationCells = Arrays.asList(locs); }但現在變得不能找到符號^變量數組錯誤 – Tom