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

时间:2017-03-09 14:26:53

标签: java arraylist collections

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

我正在学习集合是如何工作的,我从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;
            }
        }
    }
}

当我尝试查看ArrayList

的元素时,没有任何反应

2 个答案:

答案 0 :(得分:5)

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

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

哪个不行。只需使用

karty.add(karta);

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

修改

正如add中所述,<0方法在尝试在wartosc索引上添加值时会引发异常,但由于{{1}的值,您的代码永远不会到达此行变量 - 它被初始化为0,因为在1的情况下你没有将它设置为任何值而它没有初始化你的数组。

您还需要解决此问题

答案 1 :(得分:0)

你在课堂上写static int wartosc;。您没有自己初始化的静态int变量将具有0值。在这种情况下,您的public static void utworz()方法将始终无效,因为条件while(wartosc !=0)已得到满足。

但即使使用普通数组它也不应该工作,所以也许你重写代码,无论数组还是列表都不行。

在第二个答案karty.add(karty.size()-1,karta);中提到的另一件事 - 您应该将其更改为karty.add(karta)以避免在空列表中引发异常。