项目不会添加到我的ArrayList或它们不显示

Szo*_*ter 0 java collections arraylist

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

我正在学习集合如何工作,我开始ArrayList.

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

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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我试图看到的元素时,没有任何事情发生 ArrayList

m.a*_*icz 5

当您的列表为空时(所以在开头),您尝试Karta在-1此处添加索引对象

karty.add(karty.size()-1,karta);
Run Code Online (Sandbox Code Playgroud)

哪个不行.只是用

karty.add(karta);
Run Code Online (Sandbox Code Playgroud)

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


编辑

正如UnholeSheep在下面的注释中所述,add方法在尝试为<0索引添加值时会引发异常,但由于wartosc变量值,您的代码永远不会到达此行- 它正在初始化为0并且因为您没有将其设置为任何值1它没有初始化你的数组.

你还需要解决这个问题