在Java中获取输入数组的方法

时间:2018-03-19 17:34:50

标签: java methods

我必须为学校做一项任务,基本上是一个有10个项目的小型网上商店。

我这样做的方法是拥有2个包含价格和产品名称的预制阵列。然后我创建了一个用于存储用户输入的数组和一个用于存储按价格输入的乘积结果的数组。该程序有效,但问题是我们需要一个单独的文件,其中包含项目和价格表,然后使用单独的方法调用它。

我一直试图找到一种方法来做到这一点,但说实话,我已经没有时间了。如果有人可以建议我如何使用方法分离我的功能和产品/价格表,那将非常感激。

这是我的程序

    import java.util.Scanner;
    public class dunnes{

    public static void main(String args[]){

Scanner in = new Scanner(System.in);

String product[]={"Coat", "Jeans", "Shirt", "Shoes", "Skirt", "Dress", "Socks","Scarf", "Handbag","Vest"};
double price[]={99.99, 53.59, 9.99, 29.99, 24.99, 83.16, 5.99, 10.95, 23.99, 18.99};
int howMany[]=new int[10];
double multiplied[]=new double[10];
int i =0;
boolean err = false;
boolean flag = true;

for(i = 0; i<price.length; i++){
    System.out.print(+i+1+ " Please enter how many ");
    System.out.print(product[i]+ " you would like to buy (");
    System.out.print(price[i]+ ") euro each \n");
do{
    err = false;
    try{
    howMany[i] = Integer.parseInt(in.next());
    }catch (Exception e){
    err = true;
    System.out.print("Incorrect input. Must be whole numbers. \n");
    System.out.print(+i+1+ " Please enter how many ");
    System.out.print(product[i]+ " you would like to buy (");
    System.out.print(price[i]+ ") euro each \n");
    }


    }while(err);
}




for(i = 0; i<price.length; i++){
    multiplied[i]=howMany[i]*price[i];
    multiplied[i] = Math.round(multiplied[i] * 100.0) / 100.0;
}

    System.out.print("\nUnsorted total bill:\n\n");
for(i = 0; i<price.length; i++){
    System.out.print(product[i]+"\t\t");
    System.out.print(""+multiplied[i]+"\n");}

while(flag){
flag=false;
for(i=0;i<multiplied.length-1;i++){
    if(multiplied[i]>multiplied[i+1]){
        double temp = multiplied[i];
         multiplied[i] = multiplied[i+1];
         multiplied[i+1]= temp;

         String temp2=product[i];
         product[i]=product[i+1];
         product[i+1]=temp2;
         flag = true;

    }
}
}

System.out.print("\nSorted total bill:\n\n");
for(i = 0; i<price.length; i++){
    System.out.print(product[i]+"\t\t");
    System.out.print(""+multiplied[i]+"\n");
}


     }
     }

1 个答案:

答案 0 :(得分:0)

因此,首先使用Java对象的一个​​java.util.List,而不是使用多个基元数组。您可以拥有一个名为Product的Java类,其中包含字段名称和价格以及getter和setter,然后为每个产品创建一个Product实例并将其放入列表中。它现在似乎不多,但你会发现这将使你的代码更容易更改。像这样:

public class Product {
    private String name;
    private Integer price;

    public Product(String name, Integer price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {return name;}
    public Integer getPrice() {return price;}
    public void setName(String name) {this.name = name;}
    public void setPrice(Integer price) {this.price = price;}
}

现在在很大程度上,据我所知你必须从文件中加载产品列表,建议使用属性文件来执行此操作,它是一个文件,每行包含一个键,等号和一个值,并且Java上已有实用程序来解析这些文件java.util.Properties。没有完全针对这种工作而设计的,但是如果你的时间很短而且你不知道如何自己创建解析器,这可能是你最好的解决方案。你可以这样做:

Properties prop = new Properties();
try (InputStream stream = new FileInputStream("path/filename")) {
  prop.load(stream);
} finally {
  stream.close();
}
List<Product> products = new ArrayList<>();
for(Object key : prop.keySet()) {
    String name = (String) key;
    Integer price = Integer.valueOf((String) prop.getProperty(key));
    products.add(new Product(name, price));
}