将用户输入保存到具有多个变量类型的ArrayList中

时间:2018-12-31 00:26:31

标签: java

我正在做一项家庭作业,我需要创建一个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

3 个答案:

答案 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使对象成为可打印,这是输出解决方案之一。进行更正以确保您存储的信息正确无误,他们会尝试使用该方法。