2013-09-12 2 views
0

Я пытаюсь написать метод, который будет читать текстовый файл, который выглядит следующим образом:Как отсортировать данные из текстового файла в java и поместить данные в массив для создания объекта?

N 1000.0 NY 
R 2000.0 CA 0.09 
R 500.0 GA 0.07 
N 2000.0 WY 
O 3000.0 Japan 0.11 20.0 
N 555.50 CA 
O 3300.0 Ecuador 0.03 30.0 
R 600.0 NC 0.06 

начальных буквы являются различными типами заказов. Каждый тип порядка имеет разные параметры. Я хочу, чтобы метод читал заказы из текстового файла в таком формате: Тип Цена Местоположение [TaxRate] [Тариф]. Моя путаница заключается в том, как добавить строковые данные в массив.

public static void readOrders (String fileName) 
{ 
    File file = new File (fileName); 

    scan = null; 
    try { 
     scan = new Scanner(file); 
    } catch (FileNotFoundException e) { 
     System.out.println("Error, file not found: " + file.toString()); 
     e.printStackTrace(); 
    } 

    Order[] orders = new Order[8]; 

    for (int i = 0; i < orders.length; i++) 
    { 
     String data = scan.next(); 
     String [] val = data.split(" "); 
     // String type = ?? (val[0]); 
     double price = Double.parseDouble(val[1]); 
     // String location = ?? (val[2]); 
     double taxRate = Double.parseDouble(val[3]); 
     double tariff = Double.parseDouble(val[4]); 

     Order o = new Order (type, price, location, taxRate, tariff); 
     orders[i] = o; 
    } 
    scan.close(); 

    System.out.println("All Orders"); 
    for (Order o : orders) 
     System.out.println(o); 


} 
+0

'scan.next()' --- Я думаю, что вы имеете в виду 'scan.nextLine()' – gparyani

+0

Просто скажите 'строковый тип = значение [0] и' Строка место = значение [2 ] ' – gparyani

ответ

0
public static ArrayList<Order> readOrders (String fileName) 
    { 
     File file = new File (fileName); 
     ArrayList<Order> o = new ArrayList<Order>(); 

     scan = null; 
     try { 
      scan = new Scanner(file); 
     } catch (FileNotFoundException e) { 
      System.out.println("Error, file not found: " + file.toString()); 
      e.printStackTrace(); 
     } 


     while (scan.hasNext()) 
     { 
      String fl = scan.next(); 

      if (fl.equals("N")) 
      { 
       NonProfitOrder n = new NonProfitOrder(scan.nextDouble(), scan.next()); 
       o.add(n); 
      } 
      else if (fl.equals("R")) 
      { 
       RegularOrder r = new RegularOrder (scan.nextDouble(), scan.next(), scan.nextDouble()); 
       o.add(r); 
      } 
      else 
      { 
       OverseasOrder oo = new OverseasOrder(scan.nextDouble(), scan.next(), scan.nextDouble(), scan.nextDouble()); 
       o.add(oo); 
      } 

     } 
     return o; 
    } 
0

Необходимо выполнить следующие изменения в вашей петле for.

for (int i = 0; i < orders.length; i++) { 
    String data = scan.nextLine(); // you need to use nextLine to read a whole line 
    String[] val = data.split(" "); 
    String type = val[0]; // Since its a String 
    double price = Double.parseDouble(val[1]); 
    String location = val[2]; // Since its a String 
    double taxRate = 0.0; // Default values 
    double tariff = 0.0; // Default values 
    try { // Incase they are not present - error handling 
     taxRate = Double.parseDouble(val[3]); 
     tariff = Double.parseDouble(val[4]); 
    } catch (ArrayIndexOutOfBoundsException e) { 
    } 

    orders[i] = new Order(type, price, location, taxRate, tariff); 
} 
+0

Woh .... почему вы используете исключения для потока управления? Это не очень хорошая практика в целом. Взгляните на http://www.javapractices.com/topic/TopicAction.do?Id=19 – roehrijn

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