私はこれにしばらく取り組んできましたが、これまでのところ私のコードです。int m[] = new int[variable]
配列内のアイテムの数を変更する方法や、ゼロを削除する/配列をシフトする方法がわからないため、しばらくの間、私はかなり迷っていました。配列をソートして中央値を見つける必要があるため、ゼロが問題です。
割り当ては次のとおりです。
タスクの説明
中央値は、統計の世界で重要な役割を果たします。定義上、これは配列を 2 つの等しい部分に分割する値です。この問題では、いくつかの長整数の現在の中央値を決定します。
5 つの数字 {1,3,6,2,7} があるとします。この場合、3 は両側にちょうど 2 つの数値があるため、中央値です。{1,2} と {6,7}。
{1,3,6,2,7,8} のように値が偶数個ある場合、1 つの値だけではこの配列を 2 つの部分に分割できないため、中央の値 {3,6} の平均を考慮します。したがって、中央値は (3+6)/2 = 4.5 になります。この問題では、小数部分ではなく、整数部分のみを出力する必要があります。その結果、この問題によれば、中央値は 4 になります!
プログラム入力
入力ファイル (c:\codewars\prob06.in) には多数の整数 X (0 <= X < 2^31 ) が含まれており、整数の総数 N は 10000 未満です。整数のリストの終わりを示します。「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++;
}
}
}
}