给定的任务是,编写一个程序,从文件中读取数字,从这些数字构造一个数组,并将所有零移动到数组的末尾。
例如。
之前: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--;
}
我只是在飞行中编造它,认为它会正常工作,显然它在超过最后一个值后继续运行,并不断设置越来越多的值向后计数为零,但不知道如何使它工作,任何帮助将不胜感激。