我是Java新手,我必须创建一个库存程序。该程序是:“一名销售人员在一个文本文件中输入他的销售额。每行包含以下内容(用分号分隔):
然后创建一个执行以下操作的程序:-从用户读取文件名并将其打开。对于文件不存在的情况,使用适当的例外,并要求用户再次输入文件名
- 创建一个名为“Sale”的类,该类可以在其每个对象中存储销售(名称,设备,价格和日期,如上所述)。对于设备类型,请使用ENUM,对于日期,创建一个名为“LocalDate”的类
-从文本文件中读取数据并将它们放入“Sale”对象的动态数组中
-计算并打印每种设备类型的总销售收入”
到目前为止,我有这个:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
public class Files {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("What is the filename?");
String input = in.nextLine();
File file = new File(input);
if(file.exists()){
System.out.println("The file exists. ");
}else {
File file2;
do {
System.out.println("That file does not exist. Please enter the name again. ");
Scanner in2 = new Scanner(System.in);
String input2 = in2.nextLine();
file2 = new File(input2);
if (file2.exists()) {
System.out.println("The file exists. ");
}
} while (!file.exists() && !file2.exists());
}
ArrayList<String> sales = new ArrayList<>();
try(BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Katerina Efstathiou\\Desktop\\JAVA (1) - Files and exceptions\\javaprogrone.txt"))){
String line;
while ((line = br.readLine()) != null)
//Add the line to the array-list:
sales.add(line);
}catch(IOException e){
e.printStackTrace();
}
int listSize = sales.size(); //variable with the size of the list 'sales'
String[] listOfPrices = new String[listSize]; //define an array of the size of the list
}
}
“销售”类:
public class Sale {
private String customerName; //variables are declared as private
//enum class DeviceType - (enum classes represent a group of constants, like final variables)
//Enum is short for "enumerations", which means "specifically listed"
enum DeviceType{
SMARTPHONE,
TABLET,
LAPTOP
}
private double price; //variables are declared as private
public Sale(String firstName, String lastName){ //constructor of Sale class
customerName = firstName+" "+lastName;
price = 0.0;
}
//subclass LocalDate is static ,so I can access it without creating an object of the Sale class
static class LocalDate{
private int Day;
private int Month;
private int Year;
LocalDate(){
Day=0;
Month=0;
Year=0;
}
public void Date(){
System.out.println(Day+"/"+Month+"/"+Year);
}
}
}
这是我制作的文件:
销售文件
因此,我的问题是如何将每个对象添加到数组中,以及如何计算每个设备的销售收入?(这意味着如果我卖出4部智能手机,这4部智能电话的总收入是多少?)。
我真的很绝望...我不知道还能做什么,我真的需要帮助...
了解到您正在学习Java,我已经尽可能简单,并更新了您的代码并指出了错误。
让我们一步一步来。
1: 分离组件
DeviceType枚举和LocalDate类
public enum DeviceType {
SMARTPHONE,
TABLET,
LAPTOP;
}
public class LocalDate {
private int day;
private int month;
private int year;
public static LocalDate date(String date) {
final String[] path = date.split("/");
final LocalDate result = new LocalDate();
result.day = Integer.parseInt(path[0]);
result.month = Integer.parseInt(path[1]);
result.year = Integer.parseInt(path[2]);
return result;
}
}
请注意我如何为 DeviceType 创建单独的枚举(而不是子枚举)。在我们的销售类中,我们将只对上述组件使用 hasA 关系。
此外,在date方法中,我已经更新了逻辑,可以根据输入返回LocalDate类的实例。
2: 使用组件
public class Sale {
private final String customerName;
private final double price;
private final DeviceType deviceType;
private final LocalDate date;
public Sale(String firstName, String lastName, final String device, final String cost, final String date) { //constructor of Sale class
customerName = firstName + " " + lastName;
price = Double.parseDouble(cost);
deviceType = DeviceType.valueOf(device);
this.date = LocalDate.date(date);
}
public DeviceType getDeviceType() {
return deviceType;
}
public double getPrice() {
return price;
}
public LocalDate getDate() {
return date;
}
public String getCustomerName() {
return customerName;
}
}
在这一步中,我们使用提供给我们的输入来构建我们的销售类。我们将利用上面创建的组件。
3:获得结果
List<Sale> sales = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()))) {
String line;
while ((line = br.readLine()) != null) {
//Add the line to the array-list:
final String[] parts = line.split(";");
final String[] cost = parts[2].split(",");
final String[] names = parts[0].split(" ");
final String firstName = names[0].trim();
final String lastName = names[1].trim();
final String costInteger = cost[0].trim();
final String costDecimal = cost[1].trim();
final String device = parts[1].trim();
final String date = parts[3].trim();
final Sale sale = new Sale(firstName, lastName, device, costInteger + "." + costDecimal, date);
sales.add(sale);
}
} catch (IOException e) {
e.printStackTrace();
}
final DeviceType[] deviceTypes = DeviceType.values();
for (final DeviceType deviceType : deviceTypes) {
double sum = 0;
for (final Sale sale : sales) {
if (sale.getDeviceType().name().equals(deviceType.name())) {
sum += sale.getPrice();
}
}
System.out.println("Income for device " + deviceType.name() + " is " + sum);
}
而不是创建 ArrayList sales = new ArrayList
并且为了读取文件名,请使用您在上面的代码中创建的文件对象。
一旦,我们所有的事情都设置好了,我们将尝试找到销售列表中所有可用设备类型的总和。
问题内容: 如何在类内创建和实例化jpa存储库?我处于一种情况,必须为通用类中的不同实体创建存储库。 对于Neo4j存储库,我可以轻松地做到这一点,例如, 对于JpaRepository,我检查了文档并发现了这一点, 我不确定如何在以上代码中实例化工厂。 还不能通过指定域类来像创建Neo4j一样创建存储库吗? 问题答案: 我终于以这种方式工作了, 通过SimpleJpaRepository,我可以
如何在一个类中创建和实例化jpa存储库?我现在的情况是,我必须在一个泛型类中为不同的实体创建存储库。 我可以很容易地为Neo4j存储库这样做, 对于JpaRepostory,我检查了留档,发现了这个, 我不确定如何在上面的代码中实例化工厂。 另外,我不能像为Neo4j那样通过指定域类来创建存储库吗?
问题内容: 在我的数据库中,我有一个包含两列的表。第一列包含日期,第二列是计数变量。我想知道是否有可能根据日期和计数来计算每个工作日的平均计数。在下面的一个小例子中: 桌子: 输出: 问题答案: 您可以对表达式进行一系列调用以提取当天的名称: 编辑: 鉴于编辑后的帖子中已更新了预期的输出,因此操作起来容易得多-只需按:分组即可:
问题内容: 我正在尝试计算一个月内某个产品的总销售额,但是我希望它包括所有“空”月(无销售),并且只选择最近的12个月。 到目前为止,这是我的代码。 这返回 但我希望它能回来。 我正在使用SQL Server 2008 R2 Sp1 问题答案: 在知道您有日历表之前,我已经做完了。我已经习惯了连续十二个月(包括当前)。
我用的是Jooq3.10。我想为每个选择、更新和删除查询添加具有动态值的默认条件。 例1: 我如何做到这一点?