问题在于:编写一个程序,提示用户输入商品销售信息,包括商品名称,数量和金额。首先,要求用户输入商品数量,然后逐个输入商品销售信息。然后程序将按数量(从最大到最小)打印出商品信息,并按数量(从最大到最小)分类。我无法按数量和数量对用户的信息进行排序。例如,输出应该是这样的:
按数量排序:
项目数量金额
CD 32 459.20
T恤22 650.80
书14 856.89
按金额排序:
项目数量金额
第14册856.89
T恤22 650.80
CD 32 459.20
import java.util.Scanner;
public class SalesAnalysis {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("Enter the number of goods");
int number=1;
int goods=input.nextInt();
for(int i=1;i<=goods;i++){
System.out.println("Enter information for item"+ number);
number++;
System.out.println("Name:");
String name=input.next();
String array[]=new String[]{name};
System.out.println("Quantity:");
int quantity=input.nextInt();
int ar[]=new int[]{quantity};
System.out.println("Amount (in USD):");
double amount=input.nextDouble();
double a[]=new double[]{amount};
getQuantity(array,ar,a);
getAmount(array,ar,a);
}
public static void getQuantity(String array[],int ar[],double a[]){
System.out.println("Sort by Quantity:");
System.out.println("--------------------");
System.out.print("Item"+" " +"Qty"+ "Amount" );
}
}
答案 0 :(得分:2)
好像你不熟悉java。
为Item创建一个类。将名称,数量和金额保留为其中的字段。 在创建此类时实现类似的界面。实现compareTo方法,根据数量进行比较。
在从用户那里获取输入时,继续为每个具有所需细节的项目创建一个对象,继续在arraylist中添加这些项目。
对arraylist进行排序(它会在您实施compareTo方法时对数量进行排序)。
迭代列表,并打印详细信息。
我知道你没有提到我在这里提到的很多东西,但是你最终会以这种方式学习很多关于OOP和Java的东西。
答案 1 :(得分:1)
编辑:新的和改进的答案。
因此,要开始这样做,您将要创建一个Item类,它可以存储项目的名称,项目数量和项目价格等信息。我是这样做的:
public class Item {
private String name;
private int quantity;
private double price;
public void setName (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
public void setQuantity (int quantity) {
this.quantity = quantity;
}
public int getQuantity () {
return this.quantity;
}
public void setPrice (double price) {
this.price = price;
}
public double getPrice () {
return this.price;
}
}
正如您所看到的,我已将所有存储的变量设为私有,因此我使用的是getter和setter
从这里开始,您将希望为用户提供输入项目的方法。我没有为此设置UI,但我已将其设置为程序在名为input.txt
的文件夹中读取文件的位置。我是这样做的:
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class ItemManager {
public Item[] items;
public Item[] sortedByQuantity;
public Item[] sortedByPrice;
public static void main(String[] args) {
String filepath = "input.txt";
if(args.length >= 1) {
if(args[0] != null) {
filepath = args[0];
}
}
ItemManager runProgram = new ItemManager();
runProgram.AssignValues(filepath);
runProgram.Display();
}
然后,系统会使用您已完成的扫描仪分析input.txt
的内容。输入文件的格式应如下所示:
ItemName(无空格)数量价格
新项目的新行
public void AssignValues(String filepath) {
try{
Scanner scanner = new Scanner(new File(filepath));
StringBuilder sb = new StringBuilder();
while(scanner.hasNextLine()){
sb.append(scanner.nextLine());
if(scanner.hasNextLine()){
sb.append(" ");
}
}
String content = sb.toString();
tokenizeTerms(content);
}
catch(IOException e){
System.out.println("InputDocument File IOException");
}
}
此方法使用字符串构建器从输入文本中编译单个字符串。从这里它调用内容上的tokenizeTerms。此方法使用空格作为分隔符将字符串拆分为String [],因此无法在项目名称中使用空格。
public void tokenizeTerms(String content) {
String[] tokenizedTerms = content.split(" ");
Item[] itemArray = new Item[tokenizedTerms.length/3];
int currToken = 0;
for(int i = 0; i < itemArray.length; i++) {
itemArray[i] = new Item();
try {
itemArray[i].setName(tokenizedTerms[currToken]);
currToken++;
int foo = Integer.parseInt(tokenizedTerms[currToken]);
itemArray[i].setQuantity(foo);
currToken++;
double moo = Double.parseDouble(tokenizedTerms[currToken]);
itemArray[i].setPrice(moo);
currToken++;
} catch (Exception e) {
System.out.println("Error parsing data.");
}
}
this.sortedByPrice = itemArray;
this.sortedByQuantity = itemArray;
this.items = itemArray;
}
在此方法中,它还会创建一个临时的Items数组。然后使用for循环对其进行迭代,并从输入文本中为项目分配相应的标记化值。现在我们要做的就是对数组进行排序并在控制台中打印它们。正如您在main方法中看到的那样,我们调用Display()
。
public void Display() {
Arrays.sort(sortedByQuantity, (Item i1, Item i2) -> Double.compare(i1.getQuantity(), i2.getQuantity()));
Arrays.sort(sortedByPrice, (Item i1, Item i2) -> Double.compare(i1.getPrice(), i2.getPrice()));
System.out.println("Sorted by quantity:");
for(Item currItem : sortedByQuantity) {
System.out.println("Name: " + currItem.getName() + " Quantity: " + currItem.getQuantity() + " Price: " + currItem.getPrice());
}
System.out.println("Sorted by price:");
for(Item currItem : sortedByPrice) {
System.out.println("Name: " + currItem.getName() + " Quantity: " + currItem.getQuantity() + " Price: " + currItem.getPrice());
}
}
代码首先使用lambda表达式根据自定义比较方法对数组进行排序。从这里我们只是遍历每个数组并打印每个值。
这是您正在寻找的基本设置,您现在可以根据自己的喜好修改这些方法,并以任何合适的方式应用它们。您还可以修改它以允许用户直接在软件中输入值,或修改它以允许项目名称包含空格。祝你好运。