2016-09-20 73 views
2

我建立我的第一個程序。這個想法是從文件中讀取問題列表,然後允許用戶選擇一些隨機問題來詢問。例如,該計劃將有30個問題。但是,用戶可能一次只想練習5個問題。我已經達到了我的第一個真正的掛斷。整數的ArrayList整數小整數

我正在寫一個方法,允許用戶輸入他們想問的問題數量。該方法將輸出一個不超過問題數量的x個隨機數的數組。然後,我打算使用該數組從另一個已經成功構建的方法調用實際問題。

下面是方法

public int [] ranQuest(int numQs, int totalQs) { 

    int [] numberQs = new int [numQs]; 
    int maxNum = totalQs; 

    ArrayList<Integer> allQs = new ArrayList(); 

    for (int x = 0; x < maxNum; x++) { 
     allQs.add(x); 
    } 

    Collections.shuffle(allQs); 

    for(int x = 0; x < numberQs.length; x++) {  
     numberQs[x] = allQs.get(x); 
    } 

    return numberQs; 
} 

我評論了我的故障排除打印行的代碼。 這裏是我的測試代碼:

public static void main(String[] args) { 

    GameLoad gl = new GameLoad(); 
    Scanner scan = new Scanner(System.in); 
    String userAns = null; 
    Random randInt = new Random(); 
    QuestGen questGen = new QuestGen(); 

    int [] quests = questGen.ranQuest(4, 10); 

    for (int quest : quests) { 
     System.out.println(quests[quest]); 
    } 
} 

當我運行的3,3或4,4它須藤作品輸入的代碼。我沒有遇到outofbounds異常錯誤,但數字並不按我期望的順序排列。當我運行代碼爲3,10或5,30時...我得到一個outofbounds異常錯誤,讓我暈倒,因爲我認爲我的for循環很好。

我做了很多搜索,看起來好像我可能有一個問題,試圖將整數轉換爲整數,或者我的for循環來填充int數組是不正確的。有沒有一種方式或更好的方式,然後路徑進入採取一個X數據填充的數組順序混合起來,然後填充一個新的更小的數組?

在此先感謝 喬喬

+1

提示:永遠不要聲明類型爲'ArrayList'的列表,而應使用'List',它是'ArrayList'實現的類。這將允許您輕鬆切換不同的實現(另一個受歡迎的'List'實現是'LinkedList')。所以就去'List myList = new ArrayList();' – dabadaba

+0

謝謝你的提示。我曾在其他地方看到過這一點,並不確定發生了什麼事情。你的提示清除了它。 – jojonac

+0

您應該檢查foreach和差異以減少未來的問題Foreach:http://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work For: https:/ /www.quora.com/How-does-the-lo-loop-work-in-Java希望它能幫助你解決你的問題! –

回答

2
for (int quest : quests) { 
    System.out.println(quests[quest]); 
} 

將其更改爲

for (int quest : quests) { 
    System.out.println(quest); 
} 

現在,如果你的陣列,例如包含10個,11個和12 你所要求的quests[10]的數值的元素,quests[11]quests[12],由於數組只有三個元素,顯然沒有定義它們。

+0

男人超級沮喪。我一直在尋找我的方法中的錯誤,結果發現我的測試是什麼讓我失望。感謝您的快速解決。 – jojonac