项目不添加到我的ArrayList或他们不显示
我是编程新手,我可能会问一个愚蠢的问题,但我真的需要帮助。项目不添加到我的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;
}
}
}
}
没有任何反应,当我尝试看看的ArrayList
元素当你的列表是空的(所以开头)您要添加的-1
指数这里
karty.add(karty.size()-1,karta);
Karta
对象
哪个不行。只需使用
karty.add(karta);
而且是用英语名称变量/类型/好习惯...... - 当然它不会改变你的应用程序逻辑,但会在的情况下,更具有可读性与其他程序员共享代码
编辑
由于UnholeSheep在下面的注释中说明add
方法应尝试在<0
索引上添加值时发生异常,但由于值为wartosc
变量,您的代码永远无法到达此行 - 它正在初始化为0,并且因为您没有将它设置为任何值1
的情况下,它没有初始化你的数组。
您需要修复,这也
这绝对是一个问题,但它不应该抛出'IndexOutOfBoundsException'? - 根据OP的代码运行,但只是没有显示任何'ArrayList'打印时 – UnholySheep
@UnholySheep - 正确 - 我编辑了我的答案 –
这是 karty.add(karta); 更早但它did not; t工作要么 我已经改变了我的wyswietlIlosc() 公共静态无效wyswietlIlosc(){ System.out.println(karty.size()); 现在,而不是什么,它返回0.我现在不是为什么卡没有添加到ArrayList – Szouter
你写在你的static int wartosc;
类。你自己不初始化的静态int变量将有0
值。在这种情况下,您的public static void utworz()
方法将永远不会执行任何操作,因为符合条件while(wartosc !=0)
。
但即使使用正常的数组,它也不应该工作,所以也许你重写了你的代码,并且它不管用于数组还是列表。
另一件事,在第二个答案karty.add(karty.size()-1,karta);
中提到 - 您应该将其更改为以避免在空列表中引发异常。
你可能想养成写“英文”代码的习惯。它适用于这种情况。我不能轻易说出各种方法应该做什么,因此很难发现问题。 – domsson
'while(wartosc!= 0){'你永远不会初始化'wartosc'到任何值,所以我不确定这应该如何工作(或者它如何能够适用于你的数组情况) – UnholySheep