2016-09-20 67 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