java - 从文本文件中查找 MIN/MAX/SUM
问题描述
输入文本文件:
最小值:1,2,3,5,6
最大:1,2,3,5,6
平均:1,2,3,5,6
从文本文件中的数字列表中获取 MIN/MAX 和 SUM。
package net.codejava;
import java.io.FileReader;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Formatter;
public class MyFile {
public static int[] toIntArray(String input, String delimiter) {
return Arrays.stream(input.split(delimiter)).mapToInt(Integer::parseInt).toArray();
}
public static void main(String[] args) throws FileNotFoundException {
//Declare Variables
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
double avg = 0.0;
int sum = 0;
int count = 0;
String[] numArray = new String[30];
int[] maxArray;
int[] minArray;
int[] sumArray;
try {
//Read the text file ('input.txt')
String myFile = "input.txt";
Scanner input = new Scanner(new FileReader(myFile));
while(input.hasNext()) {
input.next();
numArray[count] = input.next();
count++;
}
} catch(FileNotFoundException e) {
System.out.println("File not found!");
}
minArray = toIntArray(numArray[0],",");
maxArray = toIntArray(numArray[1],",");
sumArray = toIntArray(numArray[2],",");
System.out.println(" Min Value " + Arrays.stream(minArray).min().getAsInt());
System.out.println(" Max Value " + Arrays.stream(maxArray).max().getAsInt());
System.out.println(" Sum Value " + Arrays.stream(sumArray).sum());
}
}
期望的输出:
[1, 2, 3, 5, 6] 的最小值为 1
[1, 2, 3, 5, 6] 的最小值是 6
[1, 2, 3, 5, 6] 的平均值是 3.4
电流输出:
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at net.codejava.MyFile.main(MyFile.java:32)
解决方案
下面是使用 Arrays.stream 方法解决此问题的最简单方法之一,
文件格式 :
Min:1,2,3,5,6
Max:1,2,7,5,6
Avg:1,2,3,5,6
Java代码:
package org.personal.TestProject;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
import java.io.FileReader;
public final class MinMaxAvg {
public static int[] toIntArray(String input, String delimiter) {
return Arrays.stream(input.split(delimiter))
.mapToInt(Integer::parseInt)
.toArray();
}
public static void main(String[] args) throws FileNotFoundException {
//Declare Variables
int min ;
int max ;
double avg ;
int sum;
int count = 0;
String[] numArray = new String[3];
int[] maxArray;
int[] minArray;
int[] sumArray;
//Read the text file ('input.txt')
String fileName = "input.txt";
Scanner input = new Scanner(new FileReader(fileName));
//Read the numbers. Get count.
while (input.hasNext()) {
numArray[count] = input.next();
count++;
}
// Convert the comma seperated string to Int array after removing Min:, Max: and Avg: pattern from the string
minArray = toIntArray(numArray[0].replaceAll("Min:",""),",");
maxArray = toIntArray(numArray[1].replaceAll("Max:",""),",");
sumArray = toIntArray(numArray[2].replaceAll("Avg:",""),",");
// Use arrays.stream to find min,max,sum and average. Sum and average is generated for last line
min = Arrays.stream(minArray).min().getAsInt();
max = Arrays.stream(maxArray).max().getAsInt();
sum = Arrays.stream(sumArray).sum();
avg = Arrays.stream(sumArray).average().getAsDouble();
System.out.println(" Min Value " + min);
System.out.println(" Max Value " + max);
System.out.println(" Sum Value " + sum);
System.out.println(" Average Value " + avg);
}
}
输出如下,
Min Value 1
Max Value 7
Sum Value 17
Average Value 3.4
推荐阅读
- javascript - Laravel 7 Ajax 数据表获取数据更新
- android - 如何延迟返回回调直到异步任务完成?
- php - Laravel - ID [] 到 JSON 的错误编码模型 [App\QuestionOption]:检测到递归
- jquery - 如何在动态创建的对象上实现 jquery selectable
- graphql - GraphQL 中的关系“元数据”
- arrays - 为什么我们不使用带有数组的指针而不是完整的链表呢?
- c# - Html Agility Pack 如何在页面加载后获取动态生成的内容
- javascript - 如何使用 Jquery 从用户从本地保存的文件中加载的 XML 文件中查找和显示元素
- java - MySql Java 错误:检查“?”附近使用的正确语法 在调用 PreparedStatement 时的第 1 行
- r - R - 将某些行中某些列的值转移到倾向得分匹配的匹配 ID