使用Java查找文件中的最大和最小数字

时间:2014-07-29 20:08:05

标签: java file

作为这个问题的一部分,我需要找到:

  • 数量(计数)
  • 数字之和(总和)
  • 数字的平均值(平均值)
  • 哪些数字是偶数(均衡)
  • 哪些数字是奇数(赔率)

我需要找到的最后两件事是最大值和最小值。

我的老师已经写了基本代码:

Scanner infile = new Scanner ( new FileReader(args[0]) );
int count=0,sum=0, largest=Integer.MIN_VALUE,smallest=Integer.MAX_VALUE, evens=0, odds=0;
double average=0.0;

while (infile.hasNext())

我已经在while循环中编写了列出的变量的代码,但我无法弄清楚如何处理最大和最小的值。

我尝试在while循环中执行此操作:

if (count > largest)
   largest = count;

if (count < smallest)
   smallest = count;

这个想法是,当while循环迭代时,它会将它传递的数字与最大值进行比较,并且它将在计数中找到的最大值与最大值匹配,如果找到的数字大于最大值,则变为新的最大的。同样的想法最小。

虽然不行。我该怎么办?

我不确定你们是否需要这个,但这是我在while循环中为count计算的代码:

count += 1;

我该怎么办?

编辑/添加: 我想你们应该看到我在while循环中实际完成的所有其他事情:

while (infile.hasNext())
    {
        count += 1;
        sum += infile.nextInt();
        average = sum/count;
        if (sum%2 != 0)
            odds++;
        else
            evens++;
    }

2 个答案:

答案 0 :(得分:2)

此代码未经过测试,但应该按照您的要求进行测试。

 int count = 0, min = Integer.MAX_VALUE, max = Integer.MIN_VALUE,
       sum = 0, even = 0, odd = 0;
 while (scanner.hasNextInt()) {
    int number = scanner.nextInt();
    if (number < min)
        min = number;
    if (number > max)
        max = number;
    if (number % 2 == 0)
        even++;
    else
        odd++;
    sum+= number;
    count++;
 }
 double average = sum * 1.0 / count;

答案 1 :(得分:1)

我相信你需要做点什么,

int count = 0, sum = 0, largest = Integer.MIN_VALUE, smallest = Integer.MAX_VALUE, 
    evens = 0, odds = 0;
double average = 0.0;

while (infile.hasNext()) {
  if (infile.hasNextInt()) {
    int value = infile.nextInt();
    count++;
    sum += value;
    if (value > largest) {
      largest = value;
    }
    if (value < smallest) {
      smallest = value;
    }
    if (value % 2 == 0) {
      evens++;
    } else {
      odds++;
    }
  } else {
    infile.next();
  }
}
average = ((double) sum) / count;
System.out.printf("smallest = %d, largest = %d, average = %f, "
        + "sum = %d, count = %d, evens = %d, odds = %d%n",
        smallest, largest, average, sum, count,
        evens, odds);

我使用包含

的文件进行了测试
50 3 21 57 10 20

我收到了

的预期(格式化)输出
smallest = 3, largest = 57, average = 26.833333, sum = 161, count = 6, evens = 3, 
odds = 3