0

すべてのリンクを確認しましたが、探しているものを取得できないようです。読み込む必要があるテキスト ファイルがあります。まず、テキスト ファイルの形式は次のとおりです。

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

int を int 変数に読み込む必要があります。これを count と呼びます。次に、同じ行にある実際の都市を配列に入れます。次の行では、[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);
    }
}
4

1 に答える 1

1

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

最終目標

あなたのデザインから、あなたの目標は、各都市間の距離を関連付けるグラフを作成することです。次のように表示されます。

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

Scannerファイル入力とクラスに関しては、これを達成するのはそれほど難しくありません。

最初のステップ

グラフの次元 (3 x 3) を抽出する必要があります。これは、入力ファイルの最初の行で提供されます。Scanneraを含むa から整数を取得するFileことはそれほど難しくありません。適切なクラスがインポートされていることと、適切なエラー処理 (try...catchまたは例外のスロー) があることを確認してください。

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

2 つの配列が必要です。1 つは都市用、もう 1 つは距離用です。それらがどのくらい大きいかはわかりません (ファイル内のデータを想定することはなく、データの形式を想定するだけです)。そのため、ファイル自体からそれを取得する必要があります。幸いなことに、整数の後に都市自体が続きます。この整数を 1 回読み取り、複数の異なる場所で使用します。

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 のどちらが先か?」という質問に答えるための方法論や方法があれば、十分に役立つでしょう。

回転させて、さらに進むことができるかどうかを確認してください。

于 2012-04-07T01:45:27.343 に答える