2012-04-07 3 views
0

Я просмотрел все ссылки и не могу получить то, что ищу. У меня есть текстовый файл, мне нужно читать в первый формат текстового файла:.проблемы с разбором текстового файла в 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 

мне нужно прочитать Int в переменную INT, скажем, мы называем это рассчитывать. Затем фактические города на той же линии в массив. Следующие строки должны считываться в массив, где пробег связан с массивом, например [STL NY] = 575. Я могу использовать только массивы. Нет хэш-таблиц, списка, стеков или очередей. Вот что я получил до сих пор, и, честно говоря, это не так много. Я действительно мог бы использовать какую-то помощь, потому что я очень зациклен на «howto».

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) * «Я просмотрел все ссылки» * Вы просмотрели около 37,4 млн. Страниц, возвращенных для «разбора текста java»? Вау, ты занят. Но вместо того, чтобы пытаться «взглянуть на» миллионы, попробуйте «прочитать» первые 10. 2) В чем ваш вопрос? –

+0

В качестве отправной точки я бы предложил посмотреть API для 'String', чтобы узнать, как вы можете извлечь нужную информацию из каждой строки файла. Вы действительно пробовали что-нибудь, кроме того, что вы здесь разместили? – 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")); 

Вам потребуются два массива - один для городов и один для самих расстояний. Мы не знаем, насколько они велики (вы never принимаете данные в файле, вы просто принимаете форму данных), поэтому мы должны получить это из самого файла. К счастью, нам дают целое число, за которым следуют сами города. Мы будем читать это целое число один раз и использовать его в нескольких разных местах.

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

Хорошо, я думаю, что у меня может быть что-то здесь, но я получаю код ошибки: «Нестатические переменные города нельзя ссылаться из статического контекста» Я пытаюсь проверить свой код. –

Смежные вопросы