从java中的文本文件中读取整数,然后查找中位数

时间:2014-04-06 15:00:36

标签: java

我真的很困惑,不知道怎么做。

我想要做的是从文本文件中读取一组数字作为输入。

例如。

4
1
2
3
4

第一行包含N,数字计数。 N行跟随。

如果N是偶数,则 - > N/2。在这种情况下,4/2 = 2.从中我们找到列表的第二个最小数字。这是输出。

如果N是奇数,那么 - > N+1/2,并做同样的事情。

我该怎么做?到目前为止,我有这个,但我不知道如何对它进行排序并将其读入数组。

我偶然发现了这个问题。我真的只是在黑暗中拍摄。

import java.io.BufferedReader;
import java.io.InputStreamReader;

class TestClass {

    public static void main(String args[]) throws Exception {

        // read number of data from system standard input. 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        int N = Integer.parseInt(line);
        // median sum 
        long SumMedians = 0;

        {
            int[] MyArray = new int[N];
            for (int i = 0; i < N; i++) {
                MyArray[i] = Integer.parseInt(br.readLine());
            }
        }

        // write output to system standard output 
        System.out.println(SumMedians % 100000);
        System.out.println(MyArray);

    }
}

4 个答案:

答案 0 :(得分:0)

您可以对列表进行排序,然后找到中等

Arrays.sort(MyArray); // use java collection sort
SumMedians = (N % 2 == 0) ? MyArray[N/2] : MyArray[(N+1)/2];

答案 1 :(得分:0)

如果您的号码在文件中,为什么要从System.in读取?

检查this tutorial如何逐行打开和读取文件。

将数据读入字符串,然后使用Integer.parseInt()方法将它们解析为整数,并在解析它们时将它们存储在数组中。

如果您的整数以空格分隔,请执行String.split(),然后执行Integer.parseInt()

在数组中使用整数数据后,使用Arrays.sort()

对数组进行排序

答案 2 :(得分:0)

我认为你需要这样的东西:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

    public static void main(String args[] ) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int[] numbers = new int[N];
        for (int i = 0; i < N; i++) {
            numbers[i] = Integer.parseInt(br.readLine());
        }

        long sumOfTheMedians = 0;
        for (int n = 0; n < N; n++) {
            int[] slicedArray =  Arrays.copyOfRange(numbers, 0, n + 1);
            Arrays.sort(slicedArray);
            sumOfTheMedians += medianForArray(slicedArray);
        }

        System.out.println(sumOfTheMedians % 100000);

    }

    private static int medianForArray(int[] numbers) {
        int n = numbers.length - 1;  //we have table from 0 to N - 1, not from 1 to N
        return (n % 2 == 0) ? numbers[(n+1)/2] : numbers[n/2] ;
    }
}

我从您的描述和代码中推断出了这个解决方案,而且我发现了http://bit.ly/1hQhng9。我知道,它可以写得更好,但这只是一个草案。

答案 3 :(得分:0)

假设输入文件的第一行是后面的元素(n)的数量,接下来的n个数字是要推导出中位数的集合的数字,可以写下如下内容:

import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Scanner;

public class Median
{
  public Median()
  {
    try (Scanner scanner = new Scanner(Paths.get("/Users/Path/To/Input.txt")))
    {
      int numberOfElements = scanner.nextInt();

      int[] numbers = new int[numberOfElements];

      for (int i = 0; i < numberOfElements; ++i)
      {
        numbers[i] = scanner.nextInt();
      }

      Arrays.sort(numbers);

      int medianIndex = ((numberOfElements % 2 == 0 ?
        numberOfElements : numberOfElements + 1) >> 1) - 1;

      System.out.println(numbers[medianIndex]);
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    new Median();
  }
}