java - 主打印空值和 0;而不是正确的名称;由于数组/列表问题
问题描述
Last Block of main prints:
null, 0, null
null, 0, null
null, 0, null
null, 0, null
But should print the following: Ferrari 488, 0, Ferrari; Audi A7, 0, Audi
Ferrari F1, 20, Ferrari; AudiR8, 3, Audi
尝试将数组列表类型更改为被提及为错误的字符串。尝试了几种列表类型。但我没有得到指定的输出,只有 0/null 的输出,我一直在尝试很多东西;希望任何人都可以提供帮助。
import java.util.ArrayList;
class Car {
String name;
String type;
int age;
Car() {
name = null;
type = null;
age = 0;
}
Car(String name, String type, int age) {
this.name = name;
this.type = type;
this.age = age;
}
// GETTERS:
public String getName() {
return name;
}
public String getType() {
return type;
}
public int getAge() {
return age;
}
// SETTER:
public void setAge(int age) {
this.age = age;
}
public void printInfo() {
System.out.println(name + ", " + age + ", " + type);
}
}
class Audi extends Car {
String type = "Audi";
Audi() {
super("Audi A7", "Audi", 0);
}
Audi(String name, int age) {
super(name, "Audi", age);
}
}
class Ferrari extends Car {
String type = "Ferrari";
Ferrari() {
super("Ferrari 488", "Ferrari", 0);
}
Ferrari(String name, int age) {
super(name, "Ferrari", age);
}
}
class Mercedes extends Car {
String type = "Mercedes";
Mercedes() {
super("AMGGT", "Mercedes", 0);
}
Mercedes(String name, int age) {
super(name, "Mercedes", age);
}
}
class Dealer {
// ArrayList for Cars
private ArrayList<Car> cars = new ArrayList<>();
public void addCar(Car a) {
cars.add(a);
}
public void printAllInfo() {
Car print = new Car();
print.printInfo();
for (Car a : cars) {
print.printInfo();
}
}
}
public class CarBuilder {
public static void main(String[] args) {
Ferrari e1 = null, e2 = null;
Audi p1 = null, p2 = null;
Dealer z = null;
try {
e1 = new Ferrari();
if (e1.name.equals("Ferrari 488")) {
System.out.println("PASS1");
} else {
System.out.println("FAIL1");
}
if (e1.type.equals("Ferrari")) {
System.out.println("PASS2");
} else {
System.out.println("FAIL2");
}
if (e1.age == 0) {
System.out.println("PASS3");
} else {
System.out.println("FAIL3");
}
} catch (Exception e) {
System.out.println("FAIL-block1");
}
try {
p1 = new Audi();
if (p1.name.equals("Audi A7")) {
System.out.println("PASS4");
} else {
System.out.println("FAIL4");
}
if (p1.type.equals("Audi")) {
System.out.println("PASS5");
} else {
System.out.println("FAIL5");
}
if (p1.age == 0) {
System.out.println("PASS6");
} else {
System.out.println("FAIL6");
}
} catch (Exception e) {
System.out.println("FAIL-block2");
}
try {
e2 = new Ferrari("Ferrari F1", 20);
if (e2.name.equals("Ferrari F1")) {
System.out.println("PASS7");
} else {
System.out.println("FAIL7");
}
if (e2.type.equals("Ferrari")) {
System.out.println("PASS8");
} else {
System.out.println("FAIL8");
}
if (e2.age == 20) {
System.out.println("PASS9");
} else {
System.out.println("FAIL9");
}
} catch (Exception e) {
System.out.println("FAIL-block3");
}
try {
p2 = new Audi("AudiR8", 3);
if (p2.name.equals("AudiR8")) {
System.out.println("PASS10");
} else {
System.out.println("FAIL10");
}
if (p2.type.equals("Audi")) {
System.out.println("PASS11");
} else {
System.out.println("FAIL11");
}
if (p2.age == 3) {
System.out.println("PASS12");
} else {
System.out.println("FAIL12");
}
} catch (Exception e) {
System.out.println("FAIL-block4");
}
System.out.println("--- Testing printInfo function ---");
try {
e1.printInfo();
} catch (Exception e) {
System.out.println("FAIL-print1");
}
try {
p1.printInfo();
} catch (Exception e) {
System.out.println("FAIL-print2");
}
try {
e2.printInfo();
} catch (Exception e) {
System.out.println("FAIL-print3");
}
try {
p2.printInfo();
} catch (Exception e) {
System.out.println("FAIL-print4");
}
System.out.println("--- Testing printAll function. Should match the above output ---");
try {
z = new Dealer();
z.addCar((Car) e1);
z.addCar((Car) p1);
z.addCar((Car) e2);
z.addCar((Car) p2);
z.printAllInfo();
} catch (Exception e) {
System.out.println("FAIL-lastblock1");
System.out.println("FAIL-lastblock2");
System.out.println("FAIL-lastblock3");
System.out.println("FAIL-lastblock4");
}
}
}
应该打印: Ferrari 488, 0, Ferrari 而不是 null, 0, null
解决方案
您的经销商类代码仅打印空车:
public void printAllInfo() {
Car print = new Car(); // null-filled Car
print.printInfo();
for (Car a : cars) {
print.printInfo(); // !!!!! HERE !!!!
}
}
在指示的行中,您不是在打印a
的数据,而是在打印空填充的数据。
相反,它应该是:
public void printAllInfo() {
// ** No real need for these lines:
// Car print = new Car();
// print.printInfo();
for (Car a : cars) {
// print.printInfo();
a.printInfo(); // *** note the change? ***
}
}
推荐阅读
- java - Eclipse 中的 Maven Bintray 分发不上传 jar 文件。错误代码 401(未经授权)但仅适用于 jar 包装?
- php - 在 laravel 中使用多个下拉列表进行搜索,但未找到列错误
- javascript - React-得到一个白屏
- java - Java 弹簧框架。仅将类声明为 bean
- ruby-on-rails - Rspec binding.pry from 方法
- swift - UICollectionViewCell imageView 不滚动就不会加载
- python - 在使用 Flask uwsgi 提供 PIL 图像时尝试隐式序列转换
- php - 如何使用不同的ip克隆另一个数据库中另一个表中的数据表
- javascript - RecipeId 未定义
- spring-boot - 如何在apache生成的日志中隐藏敏感数据