我正在做一项家庭作业,我需要创建一个Java ArrayList来保存从Scanner读取的多种变量类型,以描述有关车辆的详细信息(即品牌,型号,颜色,年份,里程)。这应该是车辆清单应用程序。我实际上很难接受用户输入的信息并将其添加到ArrayList中,因此我可以将ArrayList打印到控制台以回读用户输入的内容。
这是我第一次必须编写具有多个变量类型(String,int)的ArrayList,因此我努力将所有信息都放在一个位置。
感谢大家的帮助-我是编程的新手,并且感谢您可以提供给我的任何改进我的代码的见识。
import java.util.ArrayList;
import java.util.Scanner;
/*
* This is a program that will store and allow
* the user to manipulate information regarding
* a vehicle in an inventory
*/
public class Automobileinventory {
public static void main(String[] args) {
Automobile automobile = new Automobile();
addVehicle();
}
public static void addVehicle() {
Scanner scnr = new Scanner(System.in);
String make;
String model;
String color;
int year;
int mileage;
ArrayList<Automobile> list = new ArrayList<Automobile> ();
list.add (new Automobile());
System.out.println("Enter vehicle make:");
make = scnr.nextLine();
System.out.println("Enter vehicle model:");
model = scnr.nextLine();
System.out.println("Enter vehicle color:");
color = scnr.nextLine();
System.out.println("Enter vehicle year:");
year = scnr.nextInt();
System.out.println("Enter vehicle mileage");
mileage = scnr.nextInt();
Automobile c = new Automobile ();
list.add(c);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
输出:
现在-当我运行代码时,这就是我得到的:
输入车辆型号: 庞蒂亚克
输入车辆型号: 大安城
输入车辆颜色: 绿色
输入车辆年份: 1997
输入车辆里程 200000
汽车@ 55f96302 汽车@ 3d4eac69
代码应返回:
预期输出:
输入车辆型号: 庞蒂亚克
输入车辆型号: 大安城
输入车辆颜色: 绿色
输入车辆年份: 1997
输入车辆里程 200000
Pontiac Grand Am Green 1997 200000
答案 0 :(得分:2)
您快到了,但有几处更改,
所有属性
String make,String model,String color, int year,int mileage
应该是Automobile
类的Getters and Setters
类的一部分
class Automobile{
String make;
String model;
String color;
int year;
int mileage;
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMileage() {
return mileage;
}
public void setMileage(int mileage) {
this.mileage = mileage;
}
}
使用所需的输出样本覆盖
toString()
类的Automobile
方法
@Override
public String toString() {
return "Automobile [make=" + make + ", model=" + model + ", color=" + color + ", year=" + year
+ ", mileage=" + mileage + "]";
}
在
addVehicle
中,始终为每辆车创建Automobile
对象并设置所有这些属性,然后将其添加到列表中
public static void addVehicle() {
Scanner scnr = new Scanner(System.in);
ArrayList<Automobile> list = new ArrayList<Automobile> ();
Automobile automobile = new Automobile();
System.out.println("Enter vehicle make:");
automobile.setMake(scnr.nextLine());
System.out.println("Enter vehicle model:");
automobile.setModel(scnr.nextLine());
System.out.println("Enter vehicle color:");
automobile.setColor(scnr.nextLine());
System.out.println("Enter vehicle year:");
automobile.setYear(scnr.nextInt());
System.out.println("Enter vehicle mileage");
automobile.setMileage(scnr.nextInt());
list.add(automobile);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i)); //this will print the tostring representation of automobile object
}
}
答案 1 :(得分:1)
要实现这一点,您需要覆盖toString
类的Automobile
方法:
private static final String SEPARATOR = " ";
@Override
public String toString() {
return new StringBuilder(getModel())
.append(SEPARATOR)
.append(getMake())
.append(SEPARATOR)
.append(getColor())
.append(SEPARATOR)
.append(getYear())
.append(SEPARATOR)
.append(getMileage())
.toString();
}
Here you can find the documentation of Object.toString
根据文档说明的方法的目的
返回对象的字符串表示形式。通常,toString方法返回“以文本形式表示”此对象的字符串。结果应该是简洁但内容丰富的表示形式,让人易于阅读。建议所有子类都重写此方法。
答案 2 :(得分:0)
您的代码中存在一些问题:
您获得的所有信息都是正确的,但是将它们存储在辅助变量中,并且在添加到列表之前永远不会进入c
。
您需要这样做:
Automobile c = new Automobile ();
System.out.println("Enter vehicle make:");
c.make = scnr.nextLine();
System.out.println("Enter vehicle model:");
c.model = scnr.nextLine();
System.out.println("Enter vehicle color:");
c.color = scnr.nextLine();
System.out.println("Enter vehicle year:");
c.year = scnr.nextInt();
System.out.println("Enter vehicle mileage");
c.mileage = scnr.nextInt();
list.add(c);
第二个问题是
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
System.out.println
不会打印任何类型的对象,例如魔术,您需要传递诸如i.name
之类的字符串才能打印。如果您像在上面的代码中那样进行传递,则只需传递要打印的 pointer ,您就可以在输出中看到java地址参考。
OBS:尝试使用Encapsulation
祝你好运,欢迎来到编程世界。
编辑:
注释中的其他人显示了如何通过system.out.println
使对象成为可打印,这是输出解决方案之一。进行更正以确保您存储的信息正确无误,他们会尝试使用该方法。