从文本文件中找到最小/最大/总和

问题描述 投票:0回答:3

输入文本文件:

最小: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 = "/home/kalinpretorius/Dropbox/Kalin Pretorius-48811/Introduction to Software Engineering/Task 14/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)
java arrays max average min
3个回答
0
投票

[也从文件中读写时,请务必在处理完成后始终关闭资源。您可以找到多种方法来执行此操作。有关处理资源的信息,请参见https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

    File fileName = new File("input.txt");

    try(FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);){

        String input = bufferedReader.readLine();

        while(input != null) {
            //Do something... text file will be of type String.
            input = bufferedReader.readLine();
        }

    } catch (FileNotFoundException e){
        System.out.println("File not found " + fileName.getName());
    } catch (IOException e) {
        System.out.println("Error processing file  " + fileName.getName());
    }

0
投票

您可以将while循环中的条件替换为:while(input.hasNext()){,然后检查输入是否为int


0
投票

也许下面是使用Arrays.stream方法解决此问题的最简单方法之一,

package org.personal.TestProject;

import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
import java.io.FileReader;

public 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 = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        double avg = 0.0;
        int sum = 0;
        int count = 0;
        String[] numArray = new String[10];
        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()) {
            input.next();
            numArray[count] = input.next();
            count++;
        }

        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());

        /*
//Max Value:

        for (int j = 0; j < count; j++) {
           // if (numArray[j] > max) {
                System.out.println(numArray[j]);
            //}
        }
//Sum:
        for (int j = 0; j < count; j++) {
            sum += numArray[j];
        }


         */
    }
}

输出在下面,

 Min Value 1
 Max Value 6
 Sum Value 17
© www.soinside.com 2019 - 2024. All rights reserved.