java - 为什么 ArrayList 中的值总是返回 null 作为 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 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);
        }
    }
}

最佳答案

这是你的问题。

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。原因是字符串上的“+=”运算符在幕后创建了一个 StringBuilder。因此,在您当前的方法中,每个循环都会创建一个新的 StringBuilder。

关于java - 为什么 ArrayList 中的值总是返回 null 作为 Java 中的第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733262/

相关文章:

java - App Engine 服务的适当范围

java - Hibernate + Lucene - 通配符搜索返回空结果

java - 通过 Junit 测试禁用 Java AWS S3 客户端的调试日志记录

java - 只安装JRE可以开发Java程序吗?

java - 在本地机器上调用特定网页时触发 Java 代码

java - 在Java中查找字符串在字符串数组中的索引

java - 延迟获取中的奇怪 session 错误

java - 项目处理器的 Spring Batch 原型(prototype)范围

java - 在 GUI 中使用预定义的字符串

java - maven - 用于 Spring 接口(interface)和实现的独立模块