2014-04-06 131 views
0

我真的被這個問題困住了,不知道該怎麼做。從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); 

    } 
} 

回答

0

你可以對列表進行排序,然後找媒體

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

如果您的號碼是在一個文件你爲什麼從System.in讀?

檢查this tutorial關於如何逐行打開和讀取文件。

將數據讀入字符串,然後使用Integer.parseInt()方法將它們解析爲整數,並在解析它們時將它們存儲在數組中。

如果你的整數之間用空格分隔做String.split(),然後做一個Integer.parseInt()

一旦你在整數數組中的數據,通過使用Arrays.sort()

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。我知道,它可以寫得更好,但這只是一個草稿。

+0

這是v。有幫助!謝謝。 – user2974706

+0

是的,它的一個hackerearth問題:)試圖找出如何使現在更快 – user2974706

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