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
当您的列表为空时(所以在开头),您尝试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它没有初始化你的数组.
你还需要解决这个问题
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |