2012-04-07 10 views
0

私はすべてのリンクを見て、私が探しているものを得ることができません。 。私は、私は読む必要があるテキストファイル最初にテキストファイル形式があります:私はint型の変数にint型を読み取る必要がJavaでテキストファイルを解析する際の問題

3 STL NY Chi //all on one line 
STL NY 575 //on its own line 
NY Chi 550 //on its own line 
STL Chi 225 //on its own line 

を、我々は数えるそれを呼び出すと言います。同じ行の実際の都市を配列にします。次の行は、[STL NY] = 575のように、配列にマイレージが関連付けられている配列を読み込む必要があります。私は配列だけを使うことができます。ハッシュテーブル、リスト、スタック、キューはありません。ここに私がこれまでに得たものがあり、正直に言うとそれほどではありません。私は本当にこれについての "ハウツー"をかなり困惑しているので、私は実際にいくつかの助けを使うことができます。

import java.io.*; 
import java.util.*; 

public class P3 { 

/** 
* @param args the command line arguments 
*/ 
public static int count; 

public static void main(String[] args) { 

    try { 

     FileInputStream dataFile = new FileInputStream("Data.txt"); 
     //BufferedReader br = new BufferedReader(new InputStreamReader(dataFile)); 

     String line = br.readLine(); 

    } 

    catch (IOException e) { 
     System.err.println ("Unable to open file"); 
     System.exit(-1); 
    } 
    } 
} 

私はそこにきていると思うが、私は、エラーコード取得しています:「非静的変数都市は静的コンテキストから参照することはできません」私は印刷によって自分のコードをテストしようとしています。誰もがこの印刷で私を助けることができますか?私はそれが正しく行ったことを確認するために何が配列にあるのかを見たいと思います。ここに私のコードです:

package p3; 

import java.io.*; 
import java.util.*; 



class citiesDist { 
    String cityOne; 
    String cityTwo; 
    int miles; 
} 

class city { 
    String cityName; 
    int numberLinks; 
    citiesDist[] citiesDists; 
} 

public class P3 { 

    city[] cities; 

    void initCity(int len) { 
     for (int i = 0; i < len; i++) { 
      cities[i] = new city(); 
     } 
    } 

    void initCitiesDist (int index, int len) { 
     for (int i = 0; i < len; i++) { 
      cities[index].citiesDists[i] = new citiesDist(); 
     } 
    } 

    void parseFile() throws FileNotFoundException, IOException { 
     FileInputStream fstream = new FileInputStream("Data.txt"); 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

     int numberCities = Integer.parseInt(br.readLine()); 
     cities = new city[numberCities]; 
     initCity(numberCities); 

     for (int i = 0; i < numberCities; i++) { 
      String line = br.readLine(); 
      int numberLink = Integer.parseInt(line.split(" ")[1]); 
      cities[i].cityName = line.split(" ")[0]; 
      cities[i].numberLinks = numberLink; 
      initCitiesDist (i, numberLink); 

      for (int j = 0; j < numberLink; j++){ 
       line = br.readLine(); 
       cities[i].citiesDists[j].cityOne = line.split(" ")[0]; 
       cities[i].citiesDists[j].cityTwo = line.split(" ")[1]; 
       cities[i].citiesDists[j].miles = Integer.parseInt(line.split(" ")[2]); 
      } 
     } 

    } 

    public static void main(String args[]) { 
     System.out.println("city" + cities.city); 
    } 
} 
+1

1)* "すべてのリンクを見ました" * "parse text java"で返された約3740万ページを見ましたか?うわー、あなたは忙しかった。しかし、何百万人も見てみるのではなく、最初の10個を読んでみてください。2)あなたの質問は何ですか? –

+0

出発点として、ファイルの各行から必要な情報を抽出する方法を知るために、 'String'のAPIを調べることをお勧めします。ここに投稿した内容以外の何かを実際に試しましたか? – darrengorman

+0

真剣にアンドリュー?それが求められましたか?私はこのことをしばらくしてきた人々が、どこから始めたのかを忘れています。 –

答えて

1

あなたがコードに困惑しているなら、プログラミング言語を考えないでください。あなたのロジックをさらに混乱させるだけです。 (アルゴリズムと言語を分けてください)あなたが達成したいことがはっきりしている場合は、言語を追加してください(「を達成するにはどうすればいいですか?特定のタスクですか?」)。

究極の目標

デザインから、あなたの目標は、各都市間の距離をに関するグラフを持っていることです。

 [STL][NY] [Chi] 
[STL][0] [575][25] 
[NY] [575][0] [550] 
[Chi][25] [550][0] 

これは、ファイル入力とScannerクラスの面で、達成するには余りにもそれほど難しいことではない:それはこのように表示されます。

最初のステップは、

あなたは(3×3である)あなたのグラフの大きさを抽出する必要があります。これは入力ファイルの最初の行に表示されます。 ScannerからFileの整数を取得することはそれほど難しくありません。適切なエラー処理(try...catchまたは例外の投棄)だけでなく、適切なクラスをインポートしていることを確認してください。

Scanner sc = new Scanner(new File("input.txt")); 

都市には1つ、距離には2つの配列が必要です。彼らの大きさはわかりません(はファイル内のデータを想定していますが、データの形式を仮定しています)ので、ファイル自体から取得する必要があります。幸いなことに、都市自体の後ろに整数が与えられます。この整数は一度読み込み、複数の異なる場所で使用します。

String[] cities = new String[sc.nextInt()]; 
int[][] distances = new int[cities.length][cities.length]; 
for(int i = 0; i < cities.length; i++) { 
    // Surely there's a method in Scanner that returns String that reads the _next_ token... 
} 

あなたは今、あなたのデータ構造を設定し、行く準備ができているリーダー

に練習。あなたがここから行う必要があるのは、都市の配列と距離の配列の間の橋渡しです。彼らがファイルに到着した順序と、それらが遭遇している順序を考えてみましょう。あなたは、「最初に来たのは何ですか?STLかNYか?」という質問に答えるための方法論や方法があります。'

それを渦巻きにして、あなたがさらに上がることができるかどうか確認してください。

+0

私はここに何かがあるかもしれないと思いますが、「静的ではない変数都市は静的コンテキストから参照できません」というコードを取得しています。コードをテストしようとしています。 –

関連する問題