有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

arraylist IndexOutOfBoundsException预防措施不起作用[Java]

这里的代码可以很好地一次处理两张牌,这是我正在制作的纸牌游戏的主要设置。我遇到的问题是,我很难捕捉程序并在到达甲板末端之前让它停止。基本上应该发生的是,当牌组设置为52张牌时,每次按下enter键时,它将一次抽出两张牌。一旦到了最后两张卡(我希望用j == 1表示),if语句将捕获它并运行一组单独的代码,打印最后两张卡,然后说“你没有卡了”。出于某种原因,无论我如何设置if语句,它都不会求值,程序会到达数据组的末尾并给出错误

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:635) at java.util.ArrayList.get(ArrayList.java:411) at Game.main(Game.java:65)

我不知道如何才能让它在太晚之前赶上列表的大小

ArrayList<String> deckList = new ArrayList<String>(Arrays.asList(deck));//Changing Array with card contents into an ArrayList


    while (deckComplete == false) {         //While loop for dealing cards


        for (int j = deckList.size(); j > 0; j--) {


           // System.out.println("Hit enter to be dealt a card!");    
            String readString = scanner.nextLine(); //Set variable "readString" to user input

            if (readString.equals("")) {        //If user input equals "enter"...

                Collections.shuffle(deckList, new Random());

                if (j == 1) {   //If program gets to last card...
                       deckComplete = true; //Set desk complete to true

                       System.out.println(deckList.get(0));
                       System.out.println(deckList.get(1));//Print last card
                        System.out.println("You are out of cards!"); //Print "You are out of cards"
                       break; //Stop loop
                   }    
                        System.out.println(deckList.get(0)); //Print first card. Error code points here. 
                        deckList.remove(0); //Remove card
                        System.out.println(deckList.get(0)); //Print next card
                        deckList.remove(0); //remove card

               }



       }

共 (1) 个答案

  1. # 1 楼答案

    你初始化了j = deckList.size(),但是每次迭代j只递减1,而实际上你每次拿2张牌。j需要减少2:

    ArrayList<String> deckList = new ArrayList<String>(Arrays.asList(deck));//Changing Array with card contents into an ArrayList
    
    
    while (deckComplete == false) {         //While loop for dealing cards
    
    
        for (int j = deckList.size()-1; j > 0; j-=2) {
    
    
           // System.out.println("Hit enter to be dealt a card!");    
            String readString = scanner.nextLine(); //Set variable "readString" to user input
    
            if (readString.equals("")) {        //If user input equals "enter"...
    
                Collections.shuffle(deckList, new Random());
    
                if (j == 1) {   //If program gets to last card...
                       deckComplete = true; //Set desk complete to true
    
                       System.out.println(deckList.get(0));
                       System.out.println(deckList.get(1));//Print last card
                        System.out.println("You are out of cards!"); //Print "You are out of cards"
                       break; //Stop loop
                   }    
                        System.out.println(deckList.get(0)); //Print first card
                        deckList.remove(0); //Remove card
                        System.out.println(deckList.get(0)); //Print next card
                        deckList.remove(0); //remove card
    
               }
    
    
    
       }