它尝试打印对象的值 [[Ljava.lang.Object;@53d8d10a 我的问题是如何获取它的值并控制第一个字符是否以字符“#”开头。
我在方法decideWinner对象player1的声明中将对象作为参数传递
@Override
public void decideWinner(Object player1, Object player2) {
int sum1 = 0;
System.out.println("p1[i]" + player1);
for (int i = 0; i < 5; i++) {
player1=new Card();
if (player1.toString().substring(0, 1).startsWith("#")) {
sum1++;
System.out.println("confirm ths is inside to if block player1:" + player1 + "sum1:" + sum1);
}
}
public class Card extends Deck{
public String symbol;
public String number;
public Card() {
symbol = "$&#%";
number = "A 2 3 4 5 6 7 8 9 10 J Q K";
}
public Card(String symbol,String num){
super();
this.symbol=symbol;
this.number=num;
}
//getters
public String getSymbol(){
return symbol;
}
public String getNumber(){
return number;
}
//setters
public void setSymbol(String symbol){
this.symbol=symbol;
}
public void setNumber(String number){
this.number=number;
}
@Override
public String toString() {
return symbol + number ;
}
}
我的主要内容有这个: 公共静态无效主(字符串[] args){
HeartsDealer h1 = new HeartsDealer() {
};
Card card = new Card();
Deck deck = new Deck();
try {
h1.showDeck(deck.getTotalCards(), card.getSymbol(), card.getNumber());
} catch (NullPointerException e) {
System.out.print("NullPointerException Caught" + e);
}
Card card1 = h1.dealRandomCard(deck.getTotalCards());
System.out.println("Random card from deck:" + card1.getSymbol() + card1.getNumber());
Card player1 = new Card();
Card player2 = new Card();
Object[] p1p2 = h1.dealToPlayers(player1, player2, deck.getTotalCards());
System.out.println(Arrays.toString(p1p2));
//h1.decideWinner(player1, player2,deck.getTotalCards());
h1.decideWinner(p1p2[0], p1p2[1]);
}
我的 HeartsDealer 类的另一种方法
@Override
public Object[] dealToPlayers(Object player1, Object player2, Card[] totalcards) {
Object[] p1 = new Object[5];
Object[] p2 = new Object[5];
//ArrayList<Integer> arrayList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
Random generator1 = new Random();
int randomIndex1 = generator1.nextInt(totalcards.length);
Random generator2 = new Random();
int randomIndex2 = generator2.nextInt(totalcards.length);
player1 = totalcards[randomIndex1];
//Initialization and Memory Allocation of Array of Objects
p1[i] = new Card();
p1[i] = player1;
player2 = totalcards[randomIndex2];
p2[i] = new Card();
p2[i] = player2;
}
for (Object p : p1) {
System.out.println("p1ayer 1:" + p.toString());
}
for (Object p : p2) {
System.out.println("p1ayer 2:" + p.toString());
}
return new Object[]{p1, p2};
}
您需要确保 Card 类的 toString() 方法返回适当的表示形式。
修改卡牌类:
public class Card extends Deck {
private String symbol;
private String number;
public Card() {
symbol = "$&#%";
number = "A 2 3 4 5 6 7 8 9 10 J Q K";
}
public Card(String symbol, String num) {
this.symbol = symbol;
this.number = num;
}
public String getSymbol() {
return symbol;
}
public String getNumber() {
return number;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return symbol + " " + number; // Add a space between symbol and number
}
}
现在,当您在 Card 对象上调用 toString() 时,它将返回一个字符串,符号和数字之间有一个空格。
接下来,修改decideWinner方法,将player1和player2对象正确转换为Card对象,然后检查符号的第一个字符是否以“#”开头:
@Override
public void decideWinner(Object player1, Object player2) {
int sum1 = 0;
if (player1 instanceof Card) {
Card card1 = (Card) player1;
System.out.println("Player 1: " + card1);
// Check if the symbol starts with "#"
if (card1.getSymbol().startsWith("#")) {
sum1++;
System.out.println("Player 1 has a symbol starting with '#'. Sum1: " + sum1);
}
}
// Repeat the same for player2 if needed
}