提问人: 提问时间:8/30/2023 更新时间:8/30/2023 访问量:80
为什么当我尝试在方法中添加一些元素时,我的 ArrayList 没有返回任何元素?
Why is my ArrayList returning no elements when I try to add some inside a method?
问:
出于某种原因,当我尝试使用方法将新元素添加到名为“deck”的 ArrayList 时,它没有返回任何内容。我正在尝试让整个 ArrayList 具有您通常在标准卡组中看到的内容。
法典:
public class PokerTHEMain {
// Objects
private String[] cardTypes = {"Spades", "Hearts", "Clubs", "Diamonds"} ;
private String[] cardValues = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"} ;
private ArrayList<String> deck = new ArrayList<String>();
// Methods
void ResetDeck() {
this.deck.clear() ;
for (int cardTypesItem = 0 ; cardTypesItem < this.cardTypes.length ; cardTypesItem++) {
for (int cardValuesItem = 0 ; cardValuesItem < this.cardValues.length ; cardValuesItem++) {
this.deck.add(this.cardValues[cardValuesItem] + " of " + this.cardTypes[cardTypesItem]) ;
}
}
}
...
我用来检查值的内容(在方法内部):main
for (int i = 0 ; i < PokerTHEMain.deck.size() ; i++) {
out.println(PokerTHEMain.deck.get(i)) ;
}
有关更多信息,我使用 IntelliJ IDEA 作为我的 IDE。
答:
1赞
RVLTN72
8/30/2023
#1
正确的方法是使用 getter 和 setter 方法。我会编写一个方法,您可以在其中从当前方法执行代码。甲板变量应该是全局定义的。
在方法中,读取全局变量并在方法末尾返回它。
此外,在主实例中创建对象。void setDeck()
reset
ArrayList<String> getDeck()
deck
deck
1赞
Vled
8/30/2023
#2
我的猜测是你还没有创建一个主要方法。在我的示例中,在 main 方法中,我创建了一个新的 PokerTHEMain 对象并重置了套牌,然后打印它
package org.example;
import java.util.ArrayList;
public class PokerTHEMain {
// Objects
private String[] cardTypes = {"Spades", "Hearts", "Clubs", "Diamonds"};
private String[] cardValues = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
private ArrayList<String> deck = new ArrayList<String>();
// Methods
void ResetDeck() {
this.deck.clear();
for (int cardTypesItem = 0; cardTypesItem < this.cardTypes.length; cardTypesItem++) {
for (int cardValuesItem = 0; cardValuesItem < this.cardValues.length; cardValuesItem++) {
this.deck.add(this.cardValues[cardValuesItem] + " of " + this.cardTypes[cardTypesItem]);
}
}
}
public static void main(String[] args) {
PokerTHEMain pokerTHEMain = new PokerTHEMain();
pokerTHEMain.ResetDeck();
System.out.println(pokerTHEMain.deck);
}}
希望这感觉有用!!
0赞
Reilas
8/30/2023
#3
作为建议,您应该封装花色和值。
enum Suit { Spades, Hearts, Clubs, Diamonds }
record Card(char value, Suit suit) {
@Override
public String toString() {
return switch (value) {
case 'T' -> "Ten";
case 'J' -> "Jack";
case 'Q' -> "Queen";
case 'K' -> "King";
case 'A' -> "Ace";
default -> value;
} + " of " + suit;
}
}
List<Card> deck
= new ArrayList<>(
Stream.of('2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A')
.flatMap(x -> Stream.of(Suit.values()).map(y -> new Card(x, y)))
.toList());
您甚至可以实现 Comparable 接口。
@Override
public int compareTo(Card o) {
return Integer.compare(numericValue(), o.numericValue());
}
int numericValue() {
return switch (value) {
case 'T' -> 10;
case 'J' -> 11;
case 'Q' -> 12;
case 'K' -> 13;
case 'A' -> 14;
default -> Character.digit(value, 10);
};
}
评论
PokerTHEMain
deck
getDeck()
PokerTHEMain
PokerTHEMain
ResetDeck
PokerTHEMain
PokerTHEMain
PokerTHEMain