Java 使用用户输入的编号重复for循环

Java 使用用户输入的编号重复for循环,java,arrays,for-loop,arraylist,Java,Arrays,For Loop,Arraylist,有一个程序,当按下回车按钮时,可以从标准的扑克牌组中处理牌。一切正常,但我需要添加功能,询问用户从一开始他们希望使用多少组。我有一个扫描仪,它接受输入并将其设置为变量 Scanner scanner = new Scanner(System.in); int numberOfDecks = scanner.nextInt(); 这就是我用每张卡片填充ArrayList的方式 for (int i = 0; i < deck.length; i++) {

有一个程序,当按下回车按钮时,可以从标准的扑克牌组中处理牌。一切正常,但我需要添加功能,询问用户从一开始他们希望使用多少组。我有一个扫描仪,它接受输入并将其设置为变量

Scanner scanner = new Scanner(System.in);
int numberOfDecks = scanner.nextInt();
这就是我用每张卡片填充ArrayList的方式

          for (int i = 0; i < deck.length; i++) {
                  deck[i] = faces[i % 13] + suit[i/13];
          }
我尝试过这样做,但由于某种原因,
count
从未解析为大于0,无论
numberofdeck
的值是多少。然后,我会得到一个大小正确的ArrayList,但前52个之外的每个条目都是空白的,因为循环不会超过一次。有人能看出我做错了什么吗

编辑:为了澄清,这里是整个程序

public class Card {

  public static void main(String[] args) {
        System.out.println("How many decks would you like to use?");
          Scanner scanner = new Scanner(System.in);
          int numberOfDecks = scanner.nextInt();
          String[] suit = {" of Diamonds", " of Spades", " of Hearts", " of Clubs"}; //Array of suits
          String[] faces = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};//Array of face values
          String[] deck = new String[52 * numberOfDecks];//Array of actual deck
          boolean deckComplete = false;//Boolean for finished deck
          int[] random = new int[52]; //Array with all possible numbers between 1-52

          for (int x = 0; x<random.length; x++) {
                  random[x] = x;
          } //Fills array with all possible numbers between 1-52

          Random rndNum = new Random();

        for (int count = 0; count <= numberOfDecks; count++){
          for (int i = 0; i < deck.length; i++) {
                  deck[i] = faces[i % 13] + suit[i/13];
          } //Creates array with all poassible cards in standard deck of cards
        }
          ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(deck)); //Converts above array into ArrayList

          while (deckComplete == false) {
                  for (int i = 52; i >= 1; i--) {
                      String readString = scanner.nextLine();
                          int randomNumber = rndNum.nextInt(i);
                          if (readString.equals("")) {
                                  System.out.println(arrayList.get(random[randomNumber]));
                                  arrayList.remove(random[randomNumber]);
                                  if (i == 1) {
                                          deckComplete = true;
                                          System.out.println("You are out of cards!");
                                  } //Deals out random card from deck and removes each one used
                          }
                  }

          }
  }
}
公共类卡{
公共静态void main(字符串[]args){
System.out.println(“您希望使用多少甲板?”);
扫描仪=新的扫描仪(System.in);
int numberofdeck=scanner.nextInt();
String[]suit={“钻石”、“黑桃”、“红心”、“梅花”};//套装数组
String[]faces={“Ace”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“Jack”、“Queen”、“King”};//面值数组
String[]deck=新字符串[52*numberofdeck];//实际deck的数组
boolean deckComplete=false;//完成的数据组为boolean
int[]random=new int[52];//所有可能的数字都在1-52之间的数组

对于(int x=0;x请查看我对代码的注释(我已删除了您的注释)。我认为这就是您的问题所在

import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
public class Card {

    public static void main(String[] args) {

        System.out.println("How many decks would you like to use?");
        Scanner scanner = new Scanner(System.in);
        int numberOfDecks = scanner.nextInt();
        String[] suit = {" of Diamonds", " of Spades", " of Hearts", " of Clubs"};
        String[] faces = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
        String[] deck = new String[52 * numberOfDecks];
        boolean deckComplete = false;
        //random must have the correct number of elements
        int[] random = new int[52 * numberOfDecks];

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

        Random rndNum = new Random();

        int i = 0;

        for (int count = 0; count <= numberOfDecks; count++){

            for (i = i; i < deck.length; i++) {

                System.out.println("i is " + i);
                //you were doing the same for suit (i/13), but it should be as below
                deck[i] = faces[i % 13] + suit[i % 4];
            }

            //otherwise you are overiding the same values over and over again for each loop
            i = i+52;
        }

        ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(deck));

        while (deckComplete == false) {

            //depending of number of decks user selects it has more than 52 cards
            for (int j = deck.length; j >= 1; j--) {

                //so the user know what to do
                System.out.println("Just hit enter to contine");    
                String readString = scanner.nextLine(); 
                int randomNumber = rndNum.nextInt(j);

                if (readString.equals("")) {

                    System.out.println(arrayList.get(random[randomNumber]));
                    arrayList.remove(random[randomNumber]);

                    if (j == 1) {

                        deckComplete = true;
                        System.out.println("You are out of cards!");
                    } 
                }
            }
        }
    }
}
import java.util.Random;
导入java.util.Scanner;
导入java.util.array;
导入java.util.ArrayList;
公务舱卡{
公共静态void main(字符串[]args){
System.out.println(“您希望使用多少甲板?”);
扫描仪=新的扫描仪(System.in);
int numberofdeck=scanner.nextInt();
字符串[]套装={“钻石”、“黑桃”、“红心”、“梅花”};
String[]faces={“Ace”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“Jack”、“Queen”、“King”};
字符串[]组=新字符串[52*组数];
布尔值=false;
//random必须具有正确数量的元素
int[]random=新int[52*numberofdeck];

对于(int x=0;x,就像我在评论中所说的,对于每个
计数,您都覆盖了deck的所有元素

for (int i = 0; i < deck.length; i++) {
    deck[i] = faces[i % 13] + suit[i/13];
} //Creates array with all poassible cards in standard deck of cards
for(int i=0;i
您只需要一个for循环,因为组大小已经是52*numberOfDecks

另外,请勾选这里:
套装[i/13]
。这将导致当我变大时,i/13将变大,超过套装尺寸4

将其更改为(inti=0;i

应该是

for(inti=52*count;i


我需要从0数到52*NumberOfDeck

我不确定我是否正确理解了问题,但是对于每次计数,您都会覆盖
deck
中的每个元素。如果我不清楚,很抱歉。我需要尽可能多的“deck”或者用户在开始时指定的完整52种卡类型。因此,我尝试执行循环,按照指定的次数填充阵列中的卡,以实现这一点,但它不起作用,并且无论我将循环设置为运行多少次,都只会给我初始的52。因此,对于2组,它的104张卡??您的for循环与count是正确的。您是否在代码中的任何其他位置操纵count的值?@sam完全正确。现在,如果我将其设置为两组,我将留下一个包含52张卡和52个黑点的数组。如果您也能提及更改,这将非常有帮助。:@代码注释中有疯狂的忍者更改:)哇,太谢谢你了。我知道我做错了什么!
for (int i = 0; i < deck.length; i++) {
    deck[i] = faces[i % 13] + suit[i/13];
} //Creates array with all poassible cards in standard deck of cards