Hello StackOverflow社区,
我遇到了一些涉及在数组中添加元素的输出问题。 我在课堂上创建了一个程序并且运行正常但是当我在自己的计算机上运行相同的程序/代码时,我得到以下输出(有时会生成不同的数字/错误):
“玩具:
toysdemo.ToysDemo @ 15f5897toysdemo.ToysDemo @ b162d5"
为了更清楚,这里是代码:
package toysdemo;
public class ToysDemo {
private float price;
private String name;
public float getPrice(){
return price;
}
public void setPrice(float newPrice){
price = newPrice;
}
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
public static void printToys(ToysDemo arrayOfToys[], int size) {
//display content of array
System.out.println("The toys: ");
for (int i = 0; i < size; i++) {
System.out.print(arrayOfToys[i]);
}
System.out.println();
}//print toys
public static void main(String[] args) {
ToysDemo arrayOfToys[] = new ToysDemo[5];
int numberOfToys = 0;
// create two toys and save into array
ToysDemo toy = new ToysDemo();
toy.setPrice((float)111.99);
toy.setName("Giant Squid");
arrayOfToys[numberOfToys++] = toy;
ToysDemo toy2 = new ToysDemo();
toy2.setPrice((float)21.99);
toy2.setName("small Squid");
arrayOfToys[numberOfToys++] = toy2;
//print toys into array
printToys(arrayOfToys, numberOfToys); //the call
}
}
这是一个非常简单的程序,但它对于如何显示正确的输出感到沮丧。
如果有人能帮助我弄清楚这种困境,我真的很感激。
谢谢
答案 0 :(得分:2)
实际上,您正在打印ToysDemo
对象的引用。为了使System.out.println(arrayOfToys[i])
有效,您的ToysDemo
课程需要覆盖toString
方法。
示例代码:
public class ToysDemo {
//class content...
@Override
public String toString() {
return "My name is: " + name + " and my price is: " + String.format("%.2f", price);
}
}
答案 1 :(得分:2)
当您致电System.out.print(someToy)
时,会拨打someToy.toString()
并打印结果
如果不覆盖toString()
,则会得到默认的Object.toString()
,它会输出类名和内存地址。
答案 2 :(得分:1)
您需要将函数toString添加到ToysDemo类。例如:
@Override
public String toString()
{
return "Name: "+name+"\tPrice: "+price;
}
答案 3 :(得分:1)
您需要覆盖Object类的方法toString()。如果不这样做,JVM将执行基类方法,该方法默认打印类的完全限定名称,即类名,包含名称和存储对象的内存地址,以及获得该输出的方式。现在当你调用system.out.print时,它将转到overriden方法并实现它。
例如:
Employee {
private String name;
private int age;
public void setName(String name) { this.name = name; }
public String getName() { return this.name; }
public void setAge(int age) { this.age = age; }
public int getAge() { return this.age = age; }
@Override
public String toString() {
return "Name of the employee is " + name + " and age is " + age;
}
public static void main(String args[]) {
Employee e = new Employee();
e.setName("Robert");
e.setAge(20);
System.out.println(e);
}
}