gpt4 book ai didi

java - 通过扫描文件中的数据和特定日期的输出数据来合并不同日期的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:10:08 24 4
gpt4 key购买 nike

我最近接受了主要跨国公司的面试并遇到了一个编码问题。这是一个基于 list 的问题。得到一个输入为的文件:

Date, name of fruit, no of fruits sold, total fruits.

**2018-06-01,apple,15,25 ;
2018-06-02,apple,13,25 ;
2018-06-03,apple,20,25 ;
2018-06-01,mango,12,25 ;
2018-06-02,mango,19,25 ;
2018-06-03,mango,20,25 ;
2018-06-01,orange,15,25 ;
2018-06-02,mango,16,25 ;
2018-06-02,orange,14,25 ;
2018-06-03,orange,24,25 ;
2018-06-02,apple,18,25**

我必须迭代文件,最后打印出 2018-06-02 卖出了多少水果的结果。下面是我写的代码

enter code here
public class Inventory {
public static void main(String[] args) throws IOException {
FileInputStream geek = new FileInputStream("/Users/preet/Desktop/test2.txt");
InputStreamReader reader = new InputStreamReader(geek, StandardCharsets.UTF_8);
BufferedReader in = new BufferedReader(reader);
List<String> lines = new ArrayList<String>();

Map<String, Map<String, List<Integer>>> map = new HashMap<String, Map<String, List<Integer>>>();

Map<String, List<Integer>> map2 = new HashMap<String, List<Integer>>();
List<Integer> apple = new ArrayList<Integer>();
List<Integer> mango = new ArrayList<Integer>();
List<Integer> orange = new ArrayList<Integer>();
String result = "";
String line = null;
String[] input = new String[10];
int i = 0;
while ((line = in.readLine()) != null) {
input[i] = line;
System.out.println("value at " + i + ":" + input[i]);
i++;
}

for (String a : input) {
String b[] = a.split(",");
if (b[1].equalsIgnoreCase("apple")) {
apple.add(Integer.parseInt(b[2]));
map2.put(b[1], apple);
map.put(b[0], map2);
} else if (b[1].equalsIgnoreCase("orange")) {
orange.add(Integer.parseInt(b[2]));
map2.put(b[1], orange);
map.put(b[0], map2);
} else if (b[1].equalsIgnoreCase("mango")) {
mango.add(Integer.parseInt(b[2]));
map2.put(b[1], mango);
map.put(b[0], map2);
}
if (map.containsKey(b[0])) {
Object value1 = map.get(b[0]);
map.put(b[0], map2);
} else
map.put(b[0], map2);
}
System.out.println("Fetching Keys and corresponding [Multiple] Values n");
List<String> results = new ArrayList<String>();
for (Map.Entry<String, Map<String, List<Integer>>> entry : map.entrySet()) {
String orange1 = null;
String apple1 = null;
String mango1 = null;
int a1 = 0;
int a2 = 0;
int a3 = 0;
Map<String, List<Integer>> values = entry.getValue();
for (Map.Entry<String, List<Integer>> entry1 : map2.entrySet()) {
String key = entry1.getKey();
if (key.equalsIgnoreCase("apple")) {
List l1 = entry1.getValue();
for (int j = 0; j < l1.size(); j++) {
a1 = (int) l1.get(j);
}
apple1 = entry.getKey() + " " + a1 + " apples";
results.add(apple1);
} else if (key.equalsIgnoreCase("mango")) {
List l1 = entry1.getValue();
for (int j = 0; j < l1.size(); j++) {
a2 = (int) l1.get(j);
}
mango1 = entry.getKey() + " " + a2 + " mangoes";
results.add(mango1);
} else if (key.equalsIgnoreCase("orange")) {
List l1 = entry1.getValue();
for (int j = 0; j < l1.size(); j++) {
a3 = (int) l1.get(j);
}
orange1 = entry.getKey() + " " + a3 + " oranges";
results.add(orange1);
}
}
System.out.println("Values = " + (values));
}
System.out.println("****" + results);
}
}

最佳答案

对于面试,我建议将以下内容作为第一步:遍历文件。使用 String.split() 以逗号分隔每一行。如果结果数组的元素 0 与 2018-06-02 相同,则使用 Integer.parseInt() 解析元素 2 中的整数(售出的水果数量)和添加到总数中。

这样的第一枪显然缺少输入验证。可能首先检查文件中至少有一行。检查每行是否以分号结尾。在拆分之前删除它和它之前的任何空间。检查数组的长度是否为 4。使用单参数 LocalDate.parse() 解析每一行的日期,并使用 Integer.parseInt() 解析两者售出数量和总数量。验证售出数量是否小于或等于总数。还可以检查该名称是否是已知水果的名称。

另一件事是数据建模。例如,设计一个带有名称字段的水果类和一个带有日期、总数和销售数量的水果销售类。

关于java - 通过扫描文件中的数据和特定日期的输出数据来合并不同日期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com