2014-12-07 60 views
0

一羣朋友和我正在做一個祕密的聖誕老人交流,我決定做一個程序隨機化和打印一個主列表,我會有,爲了好玩。這是迄今爲止我所擁有的。我遇到線路問題String random1 = sList.get(myRandomizer.nextInt(sList.size()));挑選然後刪除隨機元素和arraylist

它提供了錯誤,我正在做不兼容的類型,但我很確定它正在返回它應該怎麼做?

這是我最初的類

import java.io.Serializable; 
public class SpecifiedData implements Serializable 
{ 
    private String name; 
    public SpecifiedData(String name) 
    { 
     this.name = name; 
    } 
    public String getName() 
    { 
     return name; 
    } 
} 

這裏是我的測試類在我的錯誤是

import java.util.*; 
import java.io.*; 
public class Randomizer 
{ 
    public static void main(String[] args) throws IOException, ClassNotFoundException 
    { 
     Random myRandomizer = new Random(); 
     boolean done = false; 
     ArrayList<SpecifiedData> sList = new ArrayList<SpecifiedData>(); 
     File sFile = new File("Participants.dat"); 
     if(sFile.exists()) 
     { 
      FileInputStream myFIS = new FileInputStream(sFile); 
      ObjectInputStream sIn = new ObjectInputStream(myFIS); 
      sList = (ArrayList<SpecifiedData>)sIn.readObject(); 
      sIn.close(); 
     } 
     do 
     { 
      Scanner myScanner = new Scanner(System.in);   
      while (!done) 
      { 
       System.out.println("1 - add a person"); 
       System.out.println("2 - display all people"); 
       System.out.println("3 - delete person"); 
       System.out.println("4 - randomize"); 
       System.out.println("5 - exit"); 
       int choice = Integer.parseInt(myScanner.nextLine()); 
       if (choice == 1) 
       { 
        System.out.print("Enter person's name: "); 
        String participantsName = myScanner.nextLine(); 
        SpecifiedData mySpecifiedData = new SpecifiedData(participantsName); 
        sList.add(mySpecifiedData); 
       } 
       else if (choice == 2) 
       { 
        for(int i = 0; i < sList.size(); i++) 
         System.out.println(sList.get(i).getName()); 
       } 
       else if (choice == 3) 
       { 
        System.out.println("Enter persons name: "); 
        String participantsName = myScanner.nextLine(); 
        for(SpecifiedData mySpecifiedData : sList) 
        { 
         if(mySpecifiedData.getName().equals(participantsName)) 
         { 
          sList.remove(mySpecifiedData); 
          break; 
         } 
        } 
       } 
       else if (choice == 4) 
       { 
        for(int i = 0; i < (sList.size()/2); i++) 
        { 
        for(SpecifiedData mySpecifiedData : sList) 
        { 
         String random1 = sList.get(myRandomizer.nextInt(sList.size())); 
         if(mySpecifiedData.getName().equals(random1)) 
         { 
          System.out.println(random1 + "  "); 
          sList.remove(random1); 
          break; 
         } 
         String random2 = sList.get(myRandomizer.nextInt(sList.size())); 
         if(mySpecifiedData.getName().equals(random2)) 
         { 
          System.out.print(random2); 
          sList.remove(random2); 
          break; 
         } 
        } 
        }  
       } 
       else if(choice == 5) 
       { 
        done = true; 
       }  
       else 
        System.out.println("Invalid menu choice!"); 
      } 
      System.out.println("Goodbye!"); 
     }while(!done); 
     FileOutputStream myFOS = new FileOutputStream(sFile); 
     ObjectOutputStream sOut = new ObjectOutputStream(myFOS); 
     sOut.writeObject(sList); 
     sOut.close(); 
    }  
} 

回答

0

SLIST被聲明爲包含類型SpecifiedData對象的ArrayList。在這一行上,您從列表中獲取一個對象並嘗試將其分配給一個字符串。您需要將其分配給指定的數據。

SpecifiedData random1 = sList.get(myRandomizer.nextInt(sList.size())); 
0

sListSpecifiedData類型的列表,而不是String所以這種錯誤是完全正常的。順便說一句,你正在刪除你正在遍歷的列表中的元素......壞主意。我沒有仔細看過你的代碼,但有一點是肯定的:你必須改進它。