2

我对如何正确地做这件事有点困惑。我有一些方法进入它,现在我已经齐腰深了。所以我想要做的是解析一个文本文件,每行都有一堆数字,就像这样。

1 10
2 12 
3 13 

ETC....

每一个被一个空格分隔。我已经做到了,我什至可以为对象中的变量分配正确的数字。我的事情是它不断覆盖数组,并且不会用文本文件中的数据填充它的其余部分。如果我打印出数组,我认为它应该基本上打印出文本文件。

public static void main(String[] args) {
      
    Process [] pArray;
    //just need to have 10 Process
    pArray = new Process [10];
    
    //delimiter to parse string
    String delimiter = " ";
    String[] tokens;
    tokens = new String [10];
    
    /*
     * save this for input handeling
    Scanner input = new Scanner( System.in );
    System.out.println("Enter the Text file for data set");
    String fileDestination = input.next();
    * */
    
    //get data from the file
    File file = new File("C:/Users/Kenshin/Desktop/TestData.txt");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;
    try {
  
        fis = new FileInputStream(file);     
        // Here BufferedInputStream is added for fast reading.     
        bis = new BufferedInputStream(fis);   
        dis = new DataInputStream(bis);    
        // dis.available() returns 0 if the file does not have more lines.    
        while (dis.available() != 0) {   
            // this statement reads the line from the file and print it to       
            // the console.        
            int g = 0;
            //System.out.println(dis.readLine());
            tokens = dis.readLine().split(delimiter);
            int aInt = Integer.parseInt(tokens[0]);
            int bInt = Integer.parseInt(tokens[1]);
            for( int i = 0; i < tokens.length; i ++)
            {
                
                //int aInt = Integer.parseInt(tokens[i]);
                pArray[g] = new Process(aInt, bInt);
                
            }
          
            g++;
            
        }
  
        // dispose all the resources after using them.     
        fis.close();     
        bis.close();
        dis.close();
    } catch (FileNotFoundException e) {  
        e.printStackTrace();
    } catch (IOException e) {  
        e.printStackTrace();
    }
    
    for(int i = 0; i < pArray.length; i ++)
    {
        System.out.print(pArray[i].arrivalTime + " ");
        System.out.println(pArray[i].burstTime);
    }
}
4

3 回答 3

5

你不需要这样做吗

int g = 0;

你的循环之外?否则,您将不断地重写数组中的初始值,而不是推进该值(填充数组的其余部分)。

为了使这更简单,我将填充一个ArrayList<Process>或其他类似的集合,而不是一个固定长度的数组。

于 2012-10-09T13:23:57.447 回答
2

有两个问题:第一,你不需要g每次都重新初始化。其次,你的内部for循环什么都不做(唯一使用的行i被注释掉了)。尝试以下操作:

int g = 0;
while (dis.available() != 0) {   
    tokens = dis.readLine().split(delimiter);
    int aInt = Integer.parseInt(tokens[0]);
    int bInt = Integer.parseInt(tokens[1]);
    pArray[g++] = new Process(aInt, bInt);
}
于 2012-10-09T13:24:06.630 回答
0

首先:您正在重新初始化gwhile 循环的每次迭代;其次:您必须g在 for 循环内递增或使用不同的变量作为pArray. 否则,它将在 for 循环的每次迭代中继续覆盖索引 0 处的值。

int g = 0;
while (dis.available() != 0) {
    // this statement reads the line from the file and print it to
    // the console.

    //System.out.println(dis.readLine());
    tokens = dis.readLine().split(delimiter);
    int aInt = Integer.parseInt(tokens[0]);
    int bInt = Integer.parseInt(tokens[1]);
    for( int i = 0; i < tokens.length; i ++) {
        //int aInt = Integer.parseInt(tokens[i]);
        pArray[g] = new Process(aInt, bInt);
        g++;
    }
}
于 2012-10-09T13:33:23.510 回答