2016-03-28 5 views
0

Так что я пытаюсь превратить текстовый файл drinks.txt в массив торговых автоматов, с которыми я могу взаимодействовать. Я дал следующие фрагменты кода:чтение текстового файла с заданной информацией

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

public class VendingMachine { 

//data members 
private Item[] stock; //Array of Item objects in machine 
private double money; //Amount of revenue earned by machine 

/********************************************************************* 
* This is the constructor of the VendingMachine class that take a 
* file name for the items to be loaded into the vending machine. 
* 
* It creates objects of the Item class from the information in the 
* file to populate into the stock of the vending machine. It does 
* this by looping the file to determine the number of items and then 
* reading the items and populating the array of stock. 
* 
* @param filename Name of the file containing the items to stock into 
* this instance of the vending machine. 
* @throws FileNotFoundException If issues reading the file. 
*********************************************************************/ 
public VendingMachine(String filename) throws FileNotFoundException{ 
    //Open the file to read with the scanner 
    File file = new File(filename); 
    Scanner scan = new Scanner(file); 

    //Determine the total number of items listed in the file 
    int totalItem = 0; 
    while (scan.hasNextLine()){ 
     scan.nextLine(); 
     totalItem++; 
    } //End while another item in file 
    //Create the array of stock with the appropriate number of items 
    stock = new Item[totalItem]; 
    scan.close(); 

    //Open the file again with a new scanner to read the items 
    scan = new Scanner(file); 
    int itemQuantity = -1; 
    double itemPrice = -1; 
    String itemDesc = ""; 
    int count = 0; 
    String line = ""; 

    //Read through the items in the file to get their information 
    //Create the item objects and put them into the array of stock 
    while(scan.hasNextLine()){ 
     line = scan.nextLine(); 
     String[] tokens = line.split(","); 
     try { 
      itemDesc = tokens[0]; 
      itemPrice = Double.parseDouble(tokens[1]); 
      itemQuantity = Integer.parseInt(tokens[2]); 

      stock[count] = new Item(itemDesc, itemPrice, itemQuantity); 
      count++; 
     } catch (NumberFormatException nfe) { 
      System.out.println("Bad item in file " + filename + 
        " on row " + (count+1) + "."); 
     } 
    } //End while another item in file 
    scan.close(); 

    //Initialize the money data variable. 
    money = 0.0; 
} //End VendingMachine constructor 

} //End VendingMachine class definition 

Текстовые файлы выглядят следующим образом:

Milk,2.00,1 
OJ,2.50,6 
Water,1.50,10 
Soda,2.25,6 
Coffee,1.25,4 
Monster,3.00,5 

В целом, я просто пытаюсь понять, читать drinks.txt под VendingMachineDriver класс, который включает в себя основной метод. У вас есть какие-либо советы о том, как это сделать?

+0

Почему вы хотите сделать текстовое имя файла в массив? – SOFe

+0

Код, который я даю, автоматически превращает его в массив. Массив выглядит примерно так: # Стоимость единицы товара осталось 1 Молоко 2.00 3 2 OJ 1.50 6 3 Вода 3.00 2 – spartan17

+1

Вам нужно указать проблему более подробно. – additionster

ответ

0

Ваш текстовый файл уже преобразован в массив

private Item[] stock; //Array of Item objects in machine 

где вставляются здесь элементы

stock[count] = new Item(itemDesc, itemPrice, itemQuantity); 

Вы можете сделать что-то с stock массив внутри класса, как это

for (int i = 0; i < stock.length; i++) { 
    Item item = stock[i]; 
    // Do something with item 
} 

Или сделать что-то с ним извне (вам необходимо создать геттер для этого)

Внутри класса

public Item getStockForIndex(int i) { 
    return stock[i]; 
} 

Где основной код

VendingMachine vm = new VendingMachine("filename.txt"); 

// Get first item 
Item item = vm.getStockForIndex(0); 

// Do something with item 
0

Чтобы объявить и создать новый текстовый файл, например, с именем «NewTextFile.txt», сделайте следующее:

File newFile=new File("NewTextFile.txt"); 

Это создает текстовый файл в текущей директории проекта вы работаете в . Вышеприведенный код также работает, если вы просто хотите назначить файл в объекте newFile, который уже существует в каталоге.
Надеюсь, это вам поможет.