Как мне зациклить эту программу ввода / вывода успешно? - PullRequest
0 голосов
/ 16 ноября 2018

Как зациклить этот код, чтобы все, что вы вводите, отображалось в файле "list.txt" успешно, и чтобы вы могли попросить добавить еще один элемент, чтобы продолжить?

Это моя подсказка, еслиэто помогает: «Напишите программу, которая будет записывать покупки, сделанные в магазине. Для каждой покупки считывайте с клавиатуры название товара, его цену и купленное количество. Вычислите стоимость покупки (число купленных, умноженных на цену),и запишите все эти данные в текстовый файл. Кроме того, отобразите эту информацию и текущую общую стоимость на экране. После ввода всех элементов запишите общую стоимость как на экране, так и в файле. Так как мы хотим запомнить всеСделав покупки, вы должны добавить новые данные в конец файла. "

package market;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;


public class Market 
{
public static void main(String[] args)
{

    String fileName = "List.txt";
    PrintWriter outputStream = null;
    try
    {
        outputStream= new PrintWriter (fileName);
    }
    catch (FileNotFoundException e)
    {
        System.out.println("Error opening the file "+ fileName);
        System.exit(0);
    }
    catch (IOException e)
    {
       System.out.println("Problem with input from file "+fileName);
    }
    Scanner keyboard = new Scanner (System.in);

    double cost;
    double total=0;

    boolean done = false;
    while(!done)
    {
         String name = keyboard.next(); 
         int quantity = keyboard.nextInt();
         double price = keyboard.nextDouble();
         cost = quantity*price;
         total += cost;

         System.out.println(quantity + " " + name + " = " + cost);
         System.out.println("Subtotal = " + total);

         outputStream.println(quantity + " " + name + " = " + cost);
         outputStream.println("Cost = " + cost);
         outputStream.println("Subtotal = " + total);
         outputStream.close();


    }
    System.out.println("Would you like another item?");
    System.out.println("Total = " + total);
}
}

1 Ответ

0 голосов
/ 16 ноября 2018

Вы в правильном направлении.Вам просто нужны небольшие изменения в вашем коде.В частности, вы проверяете логическую переменную done для цикла while.Итак, в основном вам нужно изменить значение этой переменной на основе ввода пользователя в каждом цикле, например,

package market;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;


public class Market 
{
public static void main(String[] args)
{

    String fileName = "List.txt";
    PrintWriter outputStream = null;
    try
    {
        outputStream= new PrintWriter (fileName);
    }
    catch (FileNotFoundException e)
    {
        System.out.println("Error opening the file "+ fileName);
        System.exit(0);
    }
    catch (IOException e)
    {
       System.out.println("Problem with input from file "+fileName);
    }
    Scanner keyboard = new Scanner (System.in);

    double cost;
    double total=0;

    boolean done = false;
    while(!done)
    {
         String name = keyboard.next(); 
         int quantity = keyboard.nextInt();
         double price = keyboard.nextDouble();
         cost = quantity*price;
         total += cost;

         System.out.println(quantity + " " + name + " = " + cost);
         System.out.println("Subtotal = " + total);

         outputStream.println(quantity + " " + name + " = " + cost);
         outputStream.println("Cost = " + cost);
         outputStream.println("Subtotal = " + total);

         //outputStream.close();
         //don't close the stream till you are totally done. Close this outside the while loop

        //This block of code needs to be inside the loop and not outside 
        System.out.println("Would you like another item?");
        //Modify the done variable here
        done = keyboard.nextLine().equals("Y")?false:true; // if user enters Y, loop continues, else done will be true and the loop won't continue
        System.out.println("Total = " + total);
        ////////////////////////////////////////////////////////////////
    }
    outputStream.close();
}

}
...