当前位置: 首页 > 知识库问答 >
问题:

Java arraylist所有项都相同

禄豪
2023-03-14

为什么单子里的牌都一样?我尝试了hand.add(I,card);,但输出仍然相同。

Main.java

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

public class Main {

    public static void main(String[] args) {
        List<Card> hand = new ArrayList();
        Card card = new Card((short) 7,"red");
        int b = 0;
        Random rn = new Random();
        for (int i=0;i<7;i++){
            card.setValue((short) (rn.nextInt((14 - 7) + 1) + 7));
            b = rn.nextInt(4);
            String[] colors = {"green","red","gold","brown"};
            card.setColor(colors[b]);
            System.out.println("Adding card to hand: " + card.getColor() + card.getValue() + " to: " +i);
            hand.add(card);
        }
        System.out.println("Your cards: ");
        for (Card k: hand) {
            System.out.println(k.show());
        }


    }
}
public class Card {
    public short getValue() {
        return value;
    }

    public void setValue(short value) {
        this.value = value;
    }

    short value;

    public String getColor() {
        return color;
    }

    public void setColor(String farba) {
        this.color = farba;
    }

    String color;

    public Card(short value, String color) {
        this.value = value;
        this.color = color;
    }

    public String show(){
        return color + value;
    }
}

产出:

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java
Adding card to hand: red13 to: 0
Adding card to hand: green10 to: 1
Adding card to hand: gold8 to: 2
Adding card to hand: brown10 to: 3
Adding card to hand: gold10 to: 4
Adding card to hand: gold8 to: 5
Adding card to hand: gold7 to: 6
Your cards: 
gold7
gold7
gold7
gold7
gold7
gold7
gold7

Lorem ipsum dolor sit amet,consectetur adipiscing Elit。Aenean nisl.curabitur ac arcu ornare,aliquet eros eu,pretium massa.

共有1个答案

杜祺
2023-03-14

您对列表中的所有项使用相同的Card对象,但需要不同的对象(每个Card对象拥有自己的颜色和值),因此必须在for循环中创建new Card,如下所示:

    int b = 0;
    Random rn = new Random();
    for (int i=0;i<7;i++){

        b = rn.nextInt(4);
        String[] colors = {"green","red","gold","brown"};

        Card card = new Card((short) (rn.nextInt((14 - 7) + 1) + 7),colors[b]);

        System.out.println("Adding card to hand: " + 
             card.getColor() + card.getValue() + " to: " +i);

        hand.add(card);
    }
 类似资料:
  • 我正在使用MPAndroidChart(https://github.com/PhilJay/MPAndroidChart)用于生成饼图的库。我学习了多个教程,包括wiki页面,但当我创建饼图时,所有的部分都是相同的颜色。你知道我该怎么解决这个问题吗? 代码:

  • 问题内容: 如何运行选择所有非null的MySQL查询?就像 我只需要删除所有内容即可吗? 问题答案: 您必须在每列上明确说明条件,例如

  • 我想创建一个由TreeNode对象组成的Tree数据结构。根是一个TreeNode。每个TreeNode都有一个父TreeNode和一个子TreeNode列表。树是递归构建的。我简化了代码,使这个例子不太难。函数工作正常。当没有TreeNode的child_values并且返回空列表时,递归结束。这非常好。 每个TreeNode的子节点成员不正确。脚本收集列表(node_list)中的所有Tree

  • 使用selenium web驱动程序来自动化测试,在我们的应用程序元素(3个输入字段)中xpath是相同的,所以我不能传递这三个字段中的值,请查找html

  • 我们正在用Spring Boot开发一个REST服务,并陷入了困境,想知道是否每个错误响应都应该具有相同的JSON结构? 对于错误情况,我们的服务使用简单的JSON格式进行响应。例如,如果参数格式错误,我们将以HTTP状态和JSON响应: 是我们的自定义代码id。人们可能会争论这种设计是否好,但它很简单,服务消费者可以轻松处理。 现在,Spring Boot会自动创建一些错误响应。例如,对于一个和

  • 问题内容: 在我的一些代码中,我将一系列对象放入列表中,并根据其属性(即字符串)构建了另一个列表。我需要确定第二个列表中的所有项目是否具有完全相同的值,而无需事先知道它是哪个值,然后返回布尔值,以便根据结果在代码中可以做不同的事情。 我事先不知道属性的名称,这就是为什么我试图使某些属性尽可能通用。 为了使示例更清楚,一个理想的函数“ all_same”将像这样工作: 我当时想制作一个唯一元素列表,