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