与えられた割り当ては、ファイルから数値を読み取り、それらの数値から配列を作成し、すべてのゼロを配列の最後に移動するプログラムを作成することでした。
例えば。
前:0、9、7、0、0、23、4、0
後:9、7、23、4、0、0、0、0
それを約2時間いじった後、私はこれを思いついた。
import java.io.*;
import java.util.Scanner;
public class Compactor{
Scanner in;
private int numNum = 0;
public void calcNumNum(){
try{
in = new Scanner(new File("compact.txt"));
while(in.hasNext()){
int dumpVal = in.nextInt();
numNum++;
}
makeArray(numNum);
}catch(IOException i){
System.out.println("Error: " + i.getMessage());
}
}
private void makeArray(int x){
int i = 0;
int[] arrayName = new int[x];
try{
in = new Scanner(new File("compact.txt"));
while(i < x){
arrayName[i] = in.nextInt();
i++;
}
compact(arrayName);
}catch(IOException e){
System.out.println("Error: " + e.getMessage());
}
}
private void compact(int[] x){
int counter = 0;
int bCounter = (x.length - 1);
for(int j = 0; j < x.length; j++){
if(x[j]!=0){
x[counter] = x[j];
counter++;
}else{
x[bCounter] = x[j];
bCounter--;
}
}
printArray(x);
}
private void printArray(int[] m){
int count = 0;
while(count < m.length){
System.out.print(m[count] + " ");
count++;
}
}
}
私たちに渡されたファイルは、0、6、13、0、0、75、33、0、0、0、4、2、9 21、0、86、0、32、66、0、0でした。
私が得たものは:6、13、75、33、4、29、21、0、0、0、0、0、0、0、0、0、0、0、0、0です。もちろん、読みやすくするためにそれらを入れるだけです。)
誰かがこの問題を修正する方法についての洞察を私に与えることができますか、あるいは私はコードを別のアプローチでやり直す必要があります、全体、
if(x[j]!=0){
x[counter] = x[j];
counter++;
}else{
x[bCounter] = x[j];
bCounter--;
}
私はちょうどそれがうまくいくと思ってその場で作りました、明らかにそれは最後の値を超えた後も進み続け、ゼロとして逆方向に数えてますます多くの値を設定し続けました、しかしそれをどのように機能させるかはわかりません、助けよろしくお願いします。