2015-03-20 2 views
0

Я пишу программу, которая сортирует записи в больнице. Эти записи поступают в текстовый файл, который пользователь вводит в командной строке в качестве аргумента, когда он вызывает класс «Пациент», который ниже. Формат записей для каждой строки в текстовом файле - это имя (строка), имя (строка), номер комнаты (int), age (int). Количество строк неизвестно. Пользователь будет указывать имя файла в качестве первого аргумента, а затем указать поле для сортировки. У меня возникли проблемы с выяснением того, как читать в текстовом файле и хранить информацию в массиве. Я застрял на нем около недели, поэтому я начал с нуля несколько раз. Вот что я до сих пор.Как читать строку, разделенную запятыми, из текстового файла, который вводится из командной строки в качестве аргумента?

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

public class Patient 
{ 
     public static void main(String args[]) 
    { 
     System.out.println("Servando Hernandez"); 
     System.out.println("Patient sorting Program."); 

     Scanner scan = new Scanner(args[0]); 
     String[] Rec = new String[10]; 
     while(scan.hasNextLine) 
     { 

      scan.nextLine = Rec[i]; 


     } 
     Arrays.sort(Rec); 
     for(int j=0; j<Rec.length; j++) 
     { 
      System.out.println(Rec[j]); 
     } 
    } 
} 
+0

Нужно ли быть массивом? Это было бы проще с «Листом». Кроме того, вы можете подумать о создании «записи» POJO, которая содержит информацию для каждой строки, опять же, это сделает вещи eaiser – MadProgrammer

+0

Хорошо, да! Мне просто нужны идеи, потому что я просто застрял в чтении в этих строках. Он не должен быть массивом. Я просто подумал, что это, вероятно, то, что мне нужно сделать. – Dayman

ответ

0

Количество строк неизвестно

Это позволяет предположить, что вам нужно динамическую структуру данных, которая может расти, чтобы удовлетворить ваши потребности. Рассмотрите возможность использования какого-то из List

List<String> lines = new ArrayList<>(10); 
while(scan.hasNextLine) 
{ 
    lines.add(scan.nextLine()); 
} 

Посмотрите Collections Trail для получения более подробной информации

Потому что вы имеете дело со структурированными данными, я бы рассмотреть возможность создания POJO какого-то, чтобы сделать его легче управлять. ..

public class PatientRecord { 
    private final String firstName; 
    private final String lastName; 
    private final int roomNumber; 
    private final int age; 

    public PatientRecord(String firstName, String lastName, int roomNumber, int age) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.roomNumber = roomNumber; 
     this.age = age; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public int getRoomNumber() { 
     return roomNumber; 
    } 

    public int getAge() { 
     return age; 
    } 


} 

Затем, когда вы читаете строку из файла, вы бы разобрать его, создавая новый экземпляр PatientRecord и добавить к вашему List вместо этого.

Это означает, что вы можете использовать такие вещи, как Collections.sort сортировать List в зависимости от потребностей

+0

Спасибо за ответ. Я собираюсь прочитать немного больше о POJO, потому что это для меня ново, но все это очень помогло мне. – Dayman

0

Теперь, я не слишком уверен, что это именно то, что вы хотите, потому что они код, который вы дали мне ISN» т много, но вот ваш же код, фиксированный, слегка переработан, и установить для возврата строки, как они читаются в, но отсортированы по фамилиям:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Scanner; 


public class Patient { 

    public static void main(String args[]) { 
     System.out.println("Servando Hernandez"); 
     System.out.println("Patient sorting Program."); 

     Scanner scan = null; 
     try { 
      scan = new Scanner(new File(args[0])); 
     } catch (FileNotFoundException e) { 
      System.err.println("File path \"" + args[0] + "\" not found."); 
      System.exit(0); 
     } 

     ArrayList<String> lines=new ArrayList<String>(); 
     while(scan.hasNextLine()) 
      lines.add(scan.nextLine()); 

     Collections.sort(lines); 

     for(String x : lines) 
      System.out.println(x); 
    } 
} 

Я надеюсь, что это помогает, и удачи вы.

+0

Благодарим вас за быстрый ответ. Раньше я пытался попробовать поймать, но у меня был неправильный синтаксис и вместо File использовался FileReader. Теперь все, что мне нужно сделать, это немного изучить, как разделить строки в запятых, чтобы иметь возможность сортировать их по необходимым критериям. – Dayman

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