为什么ArrayList中的值总是返回null作为Java中的第一个值?

为什么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

当我在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 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 = "";