为什么ArrayList中的值总是返回null作为Java中的第一个值?
当我在Java中使用这段代码生成随机的5张牌时,我得到了正确的结果,但是每一行牌前面都有null。为什么呢?例如,我得到nullJ♥10♥8.♥Q♦9♠, 我试着做了一些检查来防止它,但没有效果。如果你有什么建议,请告诉我我做错了什么为什么ArrayList中的值总是返回null作为Java中的第一个值?,java,Java,当我在Java中使用这段代码生成随机的5张牌时,我得到了正确的结果,但是每一行牌前面都有null。为什么呢?例如,我得到nullJ♥10♥8.♥Q♦9♠, 我试着做了一些检查来防止它,但没有效果。如果你有什么建议,请告诉我我做错了什么 import java.util.ArrayList; import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class RandomHandGener
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class RandomHandGenerator {
public static void main(String[] args) throws InterruptedException {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
String[] faces = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
char[] suits = {'♣', '♦', '♥', '♠'};
ArrayList<String> deck = new ArrayList<String>();
for (int i = 0; i < suits.length; i++) {
for (int j = 0; j < faces.length; j++) {
String temp = faces[j] + suits[i];
deck.add(temp);
}
}
int counter = 0;
int generalCounter = 0;
ArrayList<String> handsGenerated = new ArrayList<String>();
while (generalCounter < n) {
String[] currentHand = new String[5];
Random generator;
generator = new Random();
//Ako ne se pusne edin Thread.sleep dava tvurde ednakvi karti:
Thread.sleep(30);
while (counter < 5) {
int j = generator.nextInt(52);
String currentCard = deck.get(j);
if(!Arrays.asList(currentHand).contains(currentCard)) {
currentHand[counter] = currentCard;
counter++;
}
}
String buildHand = null;
for (int l = 0; l < 5; l++) {
if (currentHand[l] != null) {
buildHand += currentHand[l];
}
}
handsGenerated.add(buildHand);
counter = 0;
generalCounter++;
}
for (int i = 0; i < handsGenerated.size(); i++) {
String displayHands = handsGenerated.get(i);
System.out.println(displayHands);
}
}
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Random;
导入java.util.Scanner;
公共类随机信号发生器{
公共静态void main(字符串[]args)引发InterruptedException{
扫描仪输入=新扫描仪(System.in);
int n=input.nextInt();
字符串[]面={“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“J”、“Q”、“K”、“A”};
char[]suits={'♣', '♦', '♥', '♠'};
ArrayList deck=新的ArrayList();
for(int i=0;i<1.length;i++){
对于(int j=0;j
这是你的问题
buildHand += currentHand[l];
您将所有卡附加到原始值null
您可以这样做:
StringBuilder temp = new StringBuilder();
for (int l = 0; l < 5; l++) {
if (currentHand[l] != null) {
temp.append( currentHand[l] );
}
}
String hand = temp.toString();
StringBuilder temp=new StringBuilder();
对于(int l=0;l<5;l++){
如果(currentHand[l]!=null){
临时附加(currentHand[l]);
}
}
String hand=temp.toString();
关于解决方案的另一个注意事项。在循环和连接时最好使用StringBuilder。原因是字符串上的“+=”运算符会在窗帘下创建StringBuilder。因此,在当前方法中,每个循环都会创建一个新的StringBuilder。更改:
String buildHand = null;
到
好的,你能告诉我怎么解决这个问题吗?
String buildHand = "";