Java - 打印数组字符串数组列表

时间:2014-03-23 20:17:32

标签: java

我是Java的新手并且有一个问题。这是家庭作业,所以我不想要任何直接的答案。谢谢!

我正在研究一种用于玩扑克的遗传算法。我想创建一个字符串数组的arrayList。字符串数组将在一轮中保持每个可能的手的移动。我现在要做的是确保它正常工作是运行我的方法并打印出结果。这是我的练习课(这只是作业的一小部分):::

import java.util.ArrayList;
import java.util.Arrays;


public class Play 
{

    GeneticAlg start;
    ArrayList<Object> pop;

    public static void main(String[] args) 
    {
        GeneticAlg start = new GeneticAlg();
        ArrayList<String[]> pop = start.initializePopulation();

        for(String[] arr: pop)
        {
            System.out.println(Arrays.toString(arr));
        }

    }

}

import java.util.ArrayList;
import java.util.Random;


public class GeneticAlg 
{
    ArrayList<String[]> population;
    int[] populationScores;
    String[] chromosome;
    int generation;
    int index;

    public GeneticAlg()
    {

    }

    public ArrayList<String[]> initializePopulation()
    {
        ArrayList<String[]> population = new ArrayList<String[]>();

        for (int i = 0; i < 20; i++)
        {
            Random generator = new Random();
            String[] choices = {"bet","raise","call","check"};
            chromosome = new String[33];

            for (int j = 0; j < 33; j++)
            {
                if (j < 6) //first and second round possible hands)
                {
                    index = generator.nextInt((choices.length)-1); 
                    chromosome[j] += choices[index];
                }

                else //third, fourth, and fifth round possible hands)
                {   
                    index = generator.nextInt(choices.length);
                    chromosome[j] += choices[index];
                }
            }

            population.add(chromosome); 
        }

        return population;
    }

}

现在,它正在打印出数组,但每个条目都是这样的:

[nullcall, nullraise, nullbet, nullraise, nullcall, nullraise,....

我希望它只返回前面没有null的移动。任何建议表示赞赏。谢谢!

ETA:我用连接错误修复了两行,但它仍然在每个命令前打印“null”。有什么建议吗?

修复错误后的代码:

import java.util.ArrayList;
import java.util.Arrays;


public class Play 
{

    GeneticAlg start;
    ArrayList<Object> pop;

    public static void main(String[] args) 
    {
        GeneticAlg start = new GeneticAlg();
        ArrayList<String[]> pop = start.initializePopulation();

        for(String[] arr: pop)
        {
            System.out.println(Arrays.toString(arr));
        }

    }

}

import java.util.ArrayList;
import java.util.Random;


public class GeneticAlg 
{
    ArrayList<Object> population;
    String[] choices;
    int[] populationScores;
    String[] chromosome;
    int generation;
    int index;

    public GeneticAlg()
    {

    }

    public ArrayList<Object> initializePopulation()
    {
        population = new ArrayList<Object>();

        for (int i = 0; i < 20; i++)
        {
            Random generator = new Random();

            for (int j = 0; j < 24; j++)
            {
                if (j < 6) //first and second round possible hands)
                {
                    choices[0]= "bet";
                    choices[1]= "raise";
                    choices[3]= "call";

                    index = generator.nextInt(choices.length); 
                    chromosome[j] = choices[index];
                }

                else //third, fourth, and fifth round possible hands)
                {
                    choices[4] = "check";

                    index = generator.nextInt(choices.length);
                    chromosome[j] = choices[index];
                }
            }

            population.add(chromosome); 
        }

        return population;
    }

}

4 个答案:

答案 0 :(得分:4)

对象的数组(如Stirng s)在开头用null值填充,所以这样做

chromosome[j] += choices[index];

相同
chromosome[j]  = chromosome[j] + choices[index];

相同
chromosome[j]  = null + choices[index];

因此,您将nullchoices[index];联系在一起,例如nullbet

要解决此问题,只需使用=代替+=

答案 1 :(得分:2)

由于您不想要一个彻头彻尾的答案,请查看填充String []的代码。您的打印正在做正确的事情,但数组中的字符串实际上是&#34; nullbet,&#34; &#34; nullraise,&#34;等

答案 2 :(得分:1)

错误来自此行:

chromosome[j] += choices[index];

+ =运算符与字符串一起使用时,会将右侧字符串连接到左侧字符串的末尾。在这种情况下,它决定了染色体[j]的现有内容的选择[索引],如果将染色体声明为对象数组,它将默认为空。

你可能意味着

chromosome[j] = choices[index];

并且意外地插入了+,因为您在下面的列表中使用了population.add()。

答案 3 :(得分:1)

您的“修复”代码看起来好像无法编译 - 您可能仍在运行以前的版本。你没有初始化选择(“choices = new String [4]”)并且你混淆了它的索引(0,1,3和4)。此外,如果您稍后尝试向阵列添加第四个元素,请不要,您不能使用数组。并且您在没有强制转换的情况下将ArrayList分配给ArrayList。您只需要在原始代码中交换+ = with =,否则它似乎没问题。