0

我是 Java 新手,我正在尝试编写一个程序,要求用户输入仅包含数字的 txt 文件的名称,程序将输出文件中数字的总和、平均值、最大值和最小值. 我已经编写了大部分程序,但是我一直试图找到值的最大值和最小值。您可以提供的任何信息都会有所帮助,如果我不够清楚,我可以尝试详细说明。到目前为止,我的代码是:

public class NumberFile{
    public static void main(String[] args){

      boolean goodName = false;
      int currentNumber, sum = 0, numberCount=0;
      Scanner numberFile = null;
      FileReader infile; 

      Scanner input = new Scanner(System.in);
      System.out.println("Please enter the name of the file you wish to import: ");
      String fileName = input.nextLine();



      while (!goodName){
        try{
          infile = new FileReader(fileName);
          numberFile = new Scanner(infile);
          goodName = true;
        }
        catch (IOException e){
          System.out.println("invalid file name, please enter another name");
          fileName = input.nextLine();
        }
      }
      while (numberFile.hasNextInt()){
        currentNumber = numberFile.nextInt();
        sum+=currentNumber;
        numberCount++;
      }
      System.out.println("The sum of the numbers is " +sum);

      System.out.println("The average of the numbers is " + ((double) sum)/numberCount);



    } // end main
} // end class
4

4 回答 4

1

有两个变量 min 和 max(当然 min 和 max 最初应该是 int.max) 提示:

if(currentNumber < min)
{
  min= currentNumber;
}

if(currentNumber > max)
{
 max = currentNumber 
}

以上将在您的文件读取循环中。

于 2012-10-14T18:30:15.817 回答
1

声明两个 int 变量 - 一个“min”和一个“max”。用 Integer.MAX_VALUE 初始化 min,用 Integer.MIN_VALUE 初始化 max。

然后在你的while循环中检查每个数字与这些变量 - 即。如果数字小于“min”,则将其分配为新的“min”值。如果它大于“max”,则将其分配为新的“max”值。

希望这可以澄清,它非常简单,所以我没有放任何代码,所以你可以自己实现它。

于 2012-10-14T18:32:25.627 回答
0
int min=Integer.MAX_VALUE;
int max=Integer.MIN_VALUE;
while (numberFile.hasNextInt()){
   currentNumber = numberFile.nextInt();
   sum+=currentNumber;
   numberCount++;

   if(min>currentNumber){
      min=currentNumber;
    }
   if(max<currentNumber){
      max=currentNumber;
    }
}

每次读取小于当前最小值的新值时,将最小值声明为最大 int 值并重新分配最小值。最大值也是如此。

于 2012-10-14T18:32:35.687 回答
0

我有一个实例,我需要从包含大量插入语句的 .sql 文件中找到最大的 Id。这些语句还插入了 Id 以及所有其他字段。我认为这将是一个很好的例子,因为该文件不仅有整数,而且有大量的混合数据类型。下面是我的程序,

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

/**
 * @author Hamzeen. H.
 * @date 15/10/2015
 */
public class Driver {

    public Driver() {
    }

    private void readData() {
        try {
            Scanner inputFile = new Scanner(new DataInputStream(
                    new FileInputStream("all_inserts.sql")));
            long highest = 0L;

            while (inputFile.hasNext()) {
                String strNum = buildNumber(inputFile.next());

                if (!strNum.equals("")) {
                    Long temp = Long.parseLong(strNum);
                    if (temp > highest) {
                        highest = temp;
                    }
                }
            }
            System.out.println("Highest:: " + highest);
            inputFile.close();
        } catch (IOException e) {
            System.out.println("Problem finding file");
        }
    }

    private String buildNumber(String str) {
        StringBuilder strBuilder = new StringBuilder();

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (Character.isDigit(ch)) {
                strBuilder.append(ch);
            } else if ('.' == ch || !Character.isDigit(ch) || ',' == ch) {
                return strBuilder.toString().trim();
            }
        }
        return strBuilder.toString().trim();
    }

    public static void main(String args[]) {
        new Driver().readData();
    }
}
于 2015-10-15T09:18:47.523 回答