我真的很困惑,不知道怎么做。
我想要做的是从文本文件中读取一组数字作为输入。
例如。
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 :(得分: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();
}
}