用户输入他想要的东西,以及价格和数量

User enters what he wants, as well as price and amount

我的程序应该询问用户名称、价格以及他想要的数量,直到他按下 "x"。此时程序应该打印收据。

  1. 如何在不知道他想购买多少商品的情况下保存所有用户输入?
  2. 我正在使用三个 classes。我不知道如何给出从 Main-class 到 class Eintrag 的名称、数量和价格。
  3. 如何从主要的 Kassenzettel class 中调用列表来打印?

  4. 另外,我重写了 to String 方法,为了我的收据到 "supermarket-like",这种格式是否会应用到主要 class?

这是我的主要内容 -class:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        System.out.println("What would you like? ");
        String produkt = scanner.nextLine();
        System.out.println("How many pieces do you want?");
        int anzahl = scanner.nextInt();
        System.out.println("How much does " + produkt + "cost?");
        double preis = scanner.nextDouble();


        //Im not even sure if that should be there
        Kassenzettel list =new Kassenzettel();
        Eintrag carrots = new Eintrag("carrots", 5, 0.40);
        Kassenzettel.add(carrots);



        System.out.println("__________________________________");
        System.out.println("    IHRE RECHNUNG             ");
        System.out.println("__________________________________");


    }
}

我的 Eintrag-class:

public class Eintrag {

    private String produkt;
    private double preis;
    private int anzahl;

    public Eintrag(String produkt, int anzahl, double preis) { 
        this.anzahl=anzahl;
        this.produkt=produkt;
        this.preis=preis;   
    }

public int getAnzahl(){
    return this.anzahl;
}
public double getPreis(){
    return this.preis * this.anzahl;
}
public String getProdukt() {
    return this.produkt;
}

public void setAnzahl(int anzahl) {
    this.anzahl = anzahl;
}

public String toString() {
    return (String.format("%-9s %2d x %5.2f EUR",produkt , anzahl, preis 
                            + "%30.2f EUR", anzahl * preis));


 }
}

我的 Kassenzettel class,它应该包含一个 Eintrag 对象列表 导入 java.util.ArrayList;

public class Kassenzettel {

private static ArrayList<Eintrag> kassenZettel;
private double summe;

// Constructs a new empty grocery list.
public static void add(Eintrag item) {
    kassenZettel.add(item);

}

@Override
public String toString() {
    return (String.format("%-9s %2d x %5.2f EUR",kassenZettel 
                            + "%30.2f EUR"
                            + "SUMME", summe));

}
}

不确定,如果我得到了你想要的,但你可以使用这样的东西:

将 Kassenzettel 的 toString 方法更改为:

double sum = 0;
String ret = "";
for(int i = 0; i< kassenZettel.size(); i++){
  ret += kassenZettel.get(i).toString()+"\r\n";
  sum += kassenZettel.get(i).getPreis();
}
ret += "\r\nSumme: "+sum;

下一点,你必须为用户输入做一个循环:

Scanner scanner = new Scanner(System.in);

//create an instance of kassenzettel to add your produkts to
Kassenzettel list =new Kassenzettel();

//set variable to check if read or not (not needed if using break!)
boolean readOn = true;

//loop for reading until user inputs x or X
while(readOn){
  System.out.println("What would you like? ");
  String produkt = scanner.nextLine();

  //check if produkt name is X or x => exit the loop 
  if(produkt.equalsIgnoreCase("x")){
    readOn = false;
    break;
  }
  System.out.println("How many pieces do you want?");
  int anzahl = scanner.nextInt();
  System.out.println("How much does " + produkt + "cost?");
  double preis = scanner.nextDouble();

  //add a new item to kassenzettel
  list.add(new Eintrag(produkt, anzahl, preis));
}

//print the output of kassenzettel
System.out.println(list.toString());

编辑:

并删除:

    //Im not even sure if that should be there
    Kassenzettel list =new Kassenzettel();
    Eintrag carrots = new Eintrag("carrots", 5, 0.40);
    Kassenzettel.add(carrots);

工作代码:

http://pastebin.com/3acgm5St