我试图滚动骰子然后系统打印骰子当我在类Player中调用slaTarningar()时,
class Player{
int armees = 0;
int diceAmount = 0;
Dice Dices[];
Player(String playerType){
armees = 10;
diceAmount = ("A".equals(playerType)) ? 3 : 2;
Dices= new Dice[diceAmount];
for(int i=0;i<Dices.length;i++){
Dices[i]=new Dice();
}
}
void slaTarningar(){
for(int i=0;i<Dices.length;i++){
Dices[i].role();
}
System.out.println ("Dice: "+ Dices[1]);
}
void visaTarningar(){
String allDices="";
for(int i=0;i<Dices.length;i++){
allDices += ", " + Dices[i];
}
}
}
class Dice{
int value;
Dice(){
value=0;
}
void role(){
int role;
role = (int)(Math.random()*6+1);
value=role;
}
}
我得到的只是我的项目名称,以及其他奇怪的东西:
Dice: javaapplication9.Dice@9304b1
这里有什么问题?
答案 0 :(得分:1)
class Dice{
int value;
Dice(){
value=0;
}
void role(){
int role;
role = (int)(Math.random()*6+1);
value=role;
}
@Override
public String toString() {
return value + "";
}
}
你需要告诉Java如何打印Dice对象 - 否则它使用来自Object.toString()
的内部表示(对象的类及其哈希码)
答案 1 :(得分:1)
您正在打印对象,而不是值。使用
System.out.println ("Dice: "+ Dices[1]*.value*);
或者您可以将一个toString()方法添加到Dice类。
答案 2 :(得分:1)
您需要向toString
添加Dice
方法:
class Dice{
int value;
Dice(){
value=0;
}
void role(){
int role;
role = (int)(Math.random()*6+1);
value=role;
}
public String toString() {
return "" + value + "";
}
}
或添加getValue
方法:
class Dice{
int value;
Dice(){
value=0;
}
void role(){
int role;
role = (int)(Math.random()*6+1);
value=role;
}
public int getValue() {
return value;
}
}
//.. in other class:
System.out.println ("Dice: "+ Dices[1].getValue());
答案 3 :(得分:0)
您需要在Dice类中添加“toString”方法。
答案 4 :(得分:0)
您需要覆盖Dice.toString()
答案 5 :(得分:0)
您对println
方法的论证是"Dice: "+ Dices[1]
。
+
运算符可以将String与任意对象连接起来,它通过首先将对象转换为String来实现。它能够做到这一点,因为Object.toString()
实例方法的存在,它返回任何对象的字符串表示。
这就是在这里调用Dice[1]
转换为字符串常量(你看到的toString()
的默认实现,它继承自Object
)。
因此,您有两种方法可以解决此问题:
public String toString()
课程上的Dice
。请注意,这将是您的类的实例的默认“字符串表示”,它们将作为文本输出,因此请选择在一般上下文中有意义的内容。或者:Dice
引用的值显式传递给println语句。像println("Dice: " + Dices[1].value)
。