如何创建一个获取用户输入的数组系统?

时间:2016-05-10 21:31:18

标签: java input invoice

所以我正在创建一个发票生成器,我需要用户首先说出他们将输入多少项,然后询问项目描述(字符串),金额(int)和价格(int)。我在为这些信息创建数组时遇到了麻烦。到目前为止,我只为这里创建方法:

public static int itemDescription(){
  Scanner input=new Scanner(System.in);
  String descr = input.nextInt();    
  return(descr);
}  

public static int quantitySold(){
  Scanner input=new Scanner(System.in);
  int quansold = input.nextInt();    
  return(quansold);
 }

public static int unitPrice(){
  Scanner input=new Scanner(System.in);
  System.out.println("Unit Price:");                
  int price = input.nextInt();
  return(price);
 }

但是如果用户输入的项目不止一个,那么我将需要使用数组,因为这些数据无法存储多个数据。 (我把它们制作成不同的方法,因为我稍后需要单独的信息来计算它们的某些税。)

如何将这些输入函数转换为数组?

提前谢谢

3 个答案:

答案 0 :(得分:0)

如何将输入添加到列表中。然后,如果您愿意,您可以将列表转换为数组,但您不必:

mon

值得注意的是 - 你的itemDescription()方法返回一个int而不是一个String。你可能想要改变它。

您还可以创建一个包含所需属性的public void getInfo(int itemCount) { List<String> descriptions = new ArrayList<String>(); List<Integer> sold = new ArrayList<Integer>(); List<Integer> unitPrices = new ArrayList<Integer>(); for(int i = 0; i < itemCount; i++) { descriptions.add(itemDescription()); sold.add(quantitySold()); unitPrices.add(unitPrice()); } } 类。对于每个属性,您希望Item执行item.getInput()次!

答案 1 :(得分:0)

首先,我建议创建一个Item类,以便每个项目的描述,数量和价格可以存储在一个对象中:

public class Item {

    String description;
    int amount;
    int price;

    public Item(String desc, int amt, int p) {
        description = desc;
        amount = amt;
        price = p;
    }
}

然后,这样的事情应该在你的主要方法中起作用:

Item[] items;
String desc;
int amt;
int price;

Scanner input = new Scanner(System.in);
System.out.print("How many items? ");

while (true) {
    try {
        items = new Item[input.nextInt()];
        break;
    } catch (NumberFormatException ex) {
        System.out.println("Please enter a valid integer! ");
    }
}

for (int i=0; i<items.length; i++) {
    // prompt user to input the info and assign info to desc, amt, and p
    items[i] = new Item(desc, amt, p);
}

我还想指出,您不需要为每种方法创建单独的Scanner。如果您希望包含类似于您发布的方法的方法,您应该获取值,然后将它们传递给方法,或者只是将现有的Scanner传递给方法。

答案 2 :(得分:0)

这是一种方法:

public class Invoice {

    int ItemId;
    String Description;
    int Amount;
    int Price;

    Invoice(int itemId, String description, int amount, int price){

        this.ItemId = itemId;
        this.Description = description;
        this.Amount = amount;
        this.Price = price;
    }

    public int Get_ItemId() {
        return this.ItemId;
    }

    public String Get_Description() {
        return this.Description;
    }

    public int Get_Amount() {
        return this.Amount;
    }

    public int Get_Price() {
        return this.Price;
    }
} 

....
ArrayList<Invoice> Invoices = new ArrayList<>();  

// Add invoice for 2 leather belts of $10 each
Invoices.add(new Invoice(Invoices.size(), "Leather Belt", 2, 10));

....
// Get invoice info
int itemid = Invoices.get(0).Get_ItemId;