我已经为此工作了一段时间,这是我的代码。我已经迷失了一段时间,因为我不知道如何更改数组中的项目数int m[] = new int[variable]
或删除零/移动数组。零是问题所在,因为我需要对数组进行排序并找到中位数。
这是作业:
任务描述
中位数在统计领域发挥着重要作用。根据定义,它是将数组分成两个相等部分的值。在这个问题中,你要确定一些长整数的当前中位数。
假设我们有五个数字 {1,3,6,2,7}。在这种情况下,3 是中位数,因为它的每一侧正好有两个数字。{1,2} 和 {6,7}。
如果有偶数个像 {1,3,6,2,7,8} 这样的值,只有一个值不能将这个数组分成相等的两部分,所以我们考虑中间值 {3,6} 的平均值。因此,中位数将是 (3+6)/2 = 4.5。在这个问题中,您必须只打印整数部分,而不是小数部分。结果,根据这个问题,中位数将是 4!
程序输入
输入文件 (c:\codewars\prob06.in) 包含多个整数 X ( 0 <= X < 2^31 ) 并且整数总数 N 小于 10000。输入文件将包含一个“0”到表示整数列表的结尾。当您读入“0”时,您的程序必须退出而不计算数字 0 的新中位数。
1 3 4 60 70 50 2 0
程序输出
读入每个数字后,重新计算中位数并将其显示在屏幕上。
1 2 3 3 4 27 4
到目前为止,这是我的尝试:
import java.util.*;
import java.io.*;
public class Median {
public static void main (String args[]) {
String fileName = "textfile.txt";
//Labels scanner
Scanner inputStream = null;
int fileLen=0;
int[] m = new int[1000];
try{
inputStream = new Scanner (new File (fileName));
LineNumberReader lnr = new LineNumberReader(new FileReader(new File(fileName)));
lnr.skip(Long.MAX_VALUE);
fileLen = lnr.getLineNumber();
}
catch(Exception e) {
System.out.println("Could not open the file named: " + fileName);
System.exit(0);
}
int middle = 0;
for (int counter=0;counter<fileLen && inputStream.hasNextInt();counter++){
int unChecked = inputStream.nextInt();
if (unChecked != 0) {
m[counter]=unChecked;
removeZeros(m);
median(m, fileLen);
//Arrays.sort(m);
}else if (unChecked == 0){
counter+=fileLen;
}
}
}
public static int median(int m[],int fileLen) {
int[] b = new int[fileLen];
System.arraycopy(m, 0, b, 0, b.length);
Arrays.sort(b);
System.out.println(b[1]);
if (m.length % 2 == 0) {
System.out.println((b[(b.length / 2) - 1] + b[b.length / 2]) / 2);
return (b[(b.length / 2) - 1] + b[b.length / 2]) / 2;
} else {
System.out.println(b[b.length / 2]);
return b[b.length / 2];
}
}
static void removeZeros(int m[]) {
int counter2=0,counter4=0;
for(int counter=0;counter<m.length;counter++){
if (m[counter]!=0){
counter2++;
System.out.println(m[counter]);
}
}
int d[] = new int [counter2];
for(int counter=0;counter<m.length;counter++){
if (m[counter]==0){
d[counter4] = m[counter];
counter4++;
}
}
}
}