2017-03-29 3 views
0

私はこのような設定ファイルを読み込む方法(// ...それらを無視、コメントしている)作成しました:「行列はジョブごとに使用するツールを表しますが、それはdoesnのStringTokenizerはNoSuchElements

5 // n jobs 
2 // n tools 
1 4 5 6 2 
1 5 4 2 3 

を本当にここで重要です。

public static JobS inputJobMatrix(){ 
    String line = ""; // Line in tokenizer 
    int jobN = inputJobN(); //First number of the file (jobs) works 
    int toolN = inputToolN(); //Second number of the file (tools) works 
    //Instancing JobS object 
    JobS inputJobS = new JobS(jobN, toolN); 
    int[][] tabFill = new int[jobN][toolN]; 
    int[] tabFillOrder = new int[jobN]; 
    try { 
     // Initializing reader. 
     FileReader fr = new FileReader("input.txt"); 
     BufferedReader br = new BufferedReader(fr); 
     StringTokenizer st = new StringTokenizer(line); 
     for(int i=0; i<3; i++){ //ReachFirstLine of matrix 
      line = br.readLine(); 
      //System.out.println(line); 
     } 
     //Instancing tab for Job Order 1...n 
     int[] a = new int[jobN]; 
     for (int i=0; i<jobN; i++){ 
      a[i]=i+1; 
     } 
     //Filling Order tab with Job order 
     JobS.fillLine(tabFillOrder, a, 0); //Fills the tab with the tab a (make a copy of it we could say) 
     //Reading the matrix line by line and filling tab line 
     for(int i=0; i<jobN; i++){ 
      for(int j=0; j<toolN; j++){ 
       String str = st.nextToken(); 
       System.out.println(str); 
       tabFill[i][j] = Integer.parseInt(str); 
      } 
      line = br.readLine(); 
     } 
     inputJobS.setJobS(tabFill); 
     br.close(); 

    } catch (IOException e) { 
     System.out.println("File not found exception in inputJobMatrix."); 
    } 
    return inputJobS; 

} 

になり:ここ

は方法である私は、ループ内の問題を探して試してみたが、いずれかを見つけるdidntの

Exception in thread "main" java.util.NoSuchElementException 
at java.util.StringTokenizer.nextToken(Unknown Source) 
at pProgra.ReadJobS.inputJobMatrix(ReadJobS.java:84) 
at pProgra.PPMain.main(PPMain.java:14) 

、と私はそれ理由を理解することはできません動作しません。 ここでの目標は、bidimensionnalのint配列を入力ファイルの行列(たとえば、ジョブやツールで以前に与えたもの)で置き換え、その配列をオブジェクトに使用することです(JobS、ここではコンストラクタを与えますあまりにも)、それは助けることができる場合:

public class JobS { 
private int[] jobOrder; 
private int[][] jobS; 

public JobS(int jobs, int tools){// Creates one more line for the title (jobOrder). 
    super(); 
    int[][] tab = new int[jobs][tools]; 
    int[] tab2 = new int[jobs]; 
    this.jobS = tab; 
    this.jobOrder = tab2; 
} 

、私は最後に使用セッター:

public void setJobS(int[][] jobS) { 
    this.jobS = jobS; 
} 

私はコメントでできるだけコードを詳述してみました、私はあなたが私が欲しいものを理解することを願っていますする。

「複雑な」アプリケーションを作成しようとしているのは初めてのことなので、多分私はばかげて何かを忘れていましたが、今は1時間探していますが、これは..

あなたが助けてくれることを願っています!あなたは文字列を見ることができるよう LL

+0

'StringTokenizerはをst = new StringTokenizer(line); 'その時点で' line'は値 '' "'を持ちます。要素はありません。このコード行を 'for'ループの後に移動してください。 – jlordo

答えて

1

lineは空です:

String line = ""; // Line in tokenizer 

はので、ここでst空です:

String str = st.nextToken(); 

:あなたはこれを呼び出すので、

StringTokenizer st = new StringTokenizer(line); 

例外が発生します。

forループの後にStringTokenizerをインスタンス化することによって、lineに最初にデータがあることを確認してください。

この

変化:これ

StringTokenizer st = new StringTokenizer(line); 
for(int i=0; i<3; i++){ //ReachFirstLine of matrix 
     line = br.readLine(); 
     //System.out.println(line); 
} 

for(int i=0; i<3; i++){ //ReachFirstLine of matrix 
     line = br.readLine(); 
     //System.out.println(line); 
} 
StringTokenizer st = new StringTokenizer(line); 

側ノート - このコード:

line = br.readLine(); 

、ループ内で各繰り返しでlineの値が上書きされます、あなたが望んですることができることができますが、テキストのすべての行を追加したい場合はreadLine()が得るあなたがこれを行うことができます:

line += br.readLine(); 
+0

ありがとう!私はStringTokenizerを行かなければならなかったのですが、それは問題だったようです。 –

関連する問題