java - 项目没有添加到我的 ArrayList 中或者没有显示

标签 java arraylist collections

我是编程新手,我可能会问一个愚蠢的问题,但我真的需要帮助。

我正在学习集合的工作原理,我从 ArrayList 开始。

我决定制作一个扑克牌的ArrayList,添加了我想在实践中测试的方法(显示元素、显示特定元素等)。但这不起作用。当我将类型从 Arraylist 更改为常规数组 (Karta[] karty) 时,它的工作方式应该如此,所以我知道我在集合方面做错了。问题是我不知道是什么,因为我刚刚开始使用集合。

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

public class Main {
    static ArrayList<Karta> karty = new ArrayList<Karta>();
    static Random rand = new Random();
    static int wartosc;
    static int kolor;

    public static void utworz(){
        while(wartosc !=0){
            wartosc = rand.nextInt(13);
            kolor = rand.nextInt(3);
            Karta karta = new Karta(wartosc, kolor);
            karty.add(karty.size()-1,karta);
        }
    }

    public static void wyswietl(){
        for(int i=0; i<karty.size();i++)
            System.out.println(karty.toString());
        }

    public static int wyswietlIlosc(){
      return karty.size();
    }

    public static void wyswietlOWartosci(int w){
        for(Karta k: karty){
            if(k.wartosc == w){
                System.out.println(k.toString());
            }
        }
    }

    public static void wyswietlOKolorze(int kl){
        for(Karta k: karty){
            if(k.kolor == kl){
                System.out.println(k.toString());
            }
        }
    }

    public static void main(String[] args){
        int wybor =-1;
        Scanner sc = new Scanner(System.in);
        int wartosc;
        int kolor;
        System.out.println("Wybierz co chcesz zrobic:\n0. Zakoncz dzialanie programu\n1. Utworz nowa liste kart\n2. Wyswietl obecna liste kart\n3. Wyswietl liczbe kart w obecnej liscie\n4. Wyswietl karty z listy o podanej wartosci\n5. Wyswietl karty o podanym kolorze");
        while(wybor !=0) {
            wybor = sc.nextInt();
            switch (wybor) {
                case 1:
                    utworz();
                    System.out.println("Utworzono");
                    break;
                case 2:
                    wyswietl();
                    break;
                case 3:
                    wyswietlIlosc();
                    break;
                case 4:
                    System.out.println("Podaj wartosc (1 - as, 13 - krol): ");
                    wartosc = sc.nextInt();
                    wyswietlOWartosci(wartosc);
                    break;
                case 5:
                    System.out.println("Podaj kolor (0 - kier 1 - karo 2 - trefl 3 - pik): ");
                    kolor = sc.nextInt();
                    wyswietlOKolorze(kolor);
                    break;
                default:
                    utworz();
                    break;
            }
        }
    }
}

当我尝试查看 ArrayList 的元素时没有任何反应

最佳答案

当您的列表为空(因此在开始时)时,您尝试添加 Karta对象 -1索引在这里

karty.add(karty.size()-1,karta);

这是行不通的。只需使用

karty.add(karta);
<小时/>

此外,对变量/类型/...使用英文名称也是一个好习惯 - 当然,它不会改变您的应用程序逻辑,但在与他人共享代码时会更具可读性其他程序员

<小时/>

编辑

UnholeSheep在下面的评论中指出add尝试在 <0 上添加值时,方法应该引发异常索引,但由于 wartosc 的值,您的代码永远不会到达此行变量 - 它被初始化为 0 并且因为在 1 的情况下您没有将其设置为任何值它没有初始化您的数组。

您还需要解决这个问题

关于java - 项目没有添加到我的 ArrayList 中或者没有显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697860/

相关文章:

java - "mule4 SFTP write connector writing file with timestamp , move connector unable to fetch filename from different flow"

java - 调整 Java Swing 大小后图像变黑

java - 如何实现 FlinkKafkaPartitioner?

java - String 元素的 JdbcTemplate IN 子句

Java - Map.remove 并未实际删除

java - Sql Server 连接关闭

java - 删除列表元素 - 我在 Java 中实现最佳性能的方法

Java ArrayList - 值,而不是从 ArrayList 中删除的项目

java - 为什么for循环不继续

c# - ArrayList 究竟存储什么?