Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图从数组中获取随机元素_Java_Random - Fatal编程技术网

Java 试图从数组中获取随机元素

Java 试图从数组中获取随机元素,java,random,Java,Random,我想做的是创建一个card类,通过随机生成一个值和一套衣服来随机生成一张卡。我不在乎它是否会产生4张完全相同的卡片,这对我来说并不重要。但下面是我认为我迄今为止最好的尝试。 String[] PossCards = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; String[] PossSuits = new String[]{"C", "S", "H", "D"}; Random

我想做的是创建一个card类,通过随机生成一个值和一套衣服来随机生成一张卡。我不在乎它是否会产生4张完全相同的卡片,这对我来说并不重要。但下面是我认为我迄今为止最好的尝试。

String[] PossCards = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
String[] PossSuits = new String[]{"C", "S", "H", "D"};
Random rand = new Random();

public Card(){

    String Card = PossCards[rand.nextInt(PossCards.length)];
    String Suit = PossSuits[rand.nextInt(PossSuits.length)]; 

    String ActCard = Suit + "" + Card;
}

但这不起作用,当我使用我的Hand类尝试创建4张随机卡时,返回的值为null。以上代码中有错误吗?或者这是我在手动类中一定弄错的东西吗?

首先是java的命名约定-变量和方法使用小写字符

然后,您切换了卡片和西装的.length方法,因此您应该有:

String Suit = PossCards[rand.nextInt(PossCards.length)];
String Card = PossSuits[rand.nextInt(PossSuits.length)]; 
工作示例如下所示:不知道为什么您的示例不起作用-可能是您没有与我们共享的代码中的错误:

public class JavaApplication8 {

    public static String[] possCards = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
    public static String[] possSuits = new String[]{"C", "S", "H", "D"};
    public static Random rand = new Random();

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        while (1<2){
            System.out.println(card());
        }
    }

    public static String card() {
        String suit = possSuits[rand.nextInt(possSuits.length)];
        String card = possCards[rand.nextInt(possCards.length)];

        return suit + card;
    }
}

您得到的是PossCards的长度作为possDom数的限制

你正在做:

String Suit = PossCards[rand.nextInt(PossSuits.length)];
String Card = PossSuits[rand.nextInt(PossCards.length)];
你应该这样做:

String Card = PossCards[rand.nextInt(PossCards.length)];
String Suit = PossSuits[rand.nextInt(PossSuits.length)];

请记住java命名约定。变量名应以小写字符开头。请发布SSCCE以再现错误。是否以某种方式存储ActCard值?如何打印结果,结果将为空?发布整个代码…我同意@ppeterka66。我想看看这是怎么打印出来的。我还想看看类声明。这并不能解决OP的问题。请注意,命名约定是一个建议,它不是答案的一部分。卡阵列仍然适用,但没有解释为什么为null如果变量switchero是问题所在,则会抛出IndexOutOfBoundsExceptions,而不是null值。Lol我是唯一一个回答的人,我复制了整个测试工作示例以及您给我的内容?从-2到-3,因为我用卡片交换了套装,这很好,但是在这个例子中,它实际上没有改变任何东西,只有两个字母代表卡片的顺序。这里令人伤心的是OP不能解释这个问题。是的,任何人都可以从这段代码中创建一个工作示例,虽然这不是什么好东西,但其他人要求的是展示这在他/她的环境中是如何不起作用的。但多亏了你,OP只需要复制/粘贴这段代码,而不必考虑与他/她的代码相比它为什么有效。