Не печатать желания вывода с использованием массивов и чтения из файлов - PullRequest
0 голосов
/ 06 декабря 2018

Функция программы заключается в чтении из двух отдельных текстовых файлов. Один текстовый файл называется подарками (случайными именами) и стоимостью (общей стоимостью за каждый день).Я должен напечатать, если пользовательский ввод 3, он напечатает 3 строки со стоимостью этих 3 дней.Кроме того, я должен распечатать общую стоимость 12 дней.

Мой код

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;

import java.text.NumberFormat;

public class GiftsTwelveDays{

    public static void main(String[] args) {

        String[] gifts = new String[12];

        double[] costGifts = new double[12];

        String total = new String();

        //Following code reads the Gifts.txt file

        File file = new File("gifts.txt");

        try 
        {
            Scanner scannerFile = new Scanner(file);

            while (scannerFile.hasNextLine()) 

            {
                int i = scannerFile.nextInt();

                String present = scannerFile.nextLine();

                gifts[i - 1] = present;

            }

            scannerFile.close();

        }

        catch (FileNotFoundException e) 

        {
            System.out.println("File not Found.");
        }



        //This reads the cost and stores in array of double

        File file1 = new File("cost.txt");

        try 
        {
            Scanner scannerFile = new Scanner(file1);

            while (scannerFile.hasNextInt()) {

                scannerFile.next();

                if(scannerFile.hasNextInt())

                {

                    int i = scannerFile.nextInt();

                    double cost = scannerFile.nextDouble();

                    costGifts[i-1] = cost;

                }

                else
                {

                    scannerFile.nextInt();

                    total = scannerFile.nextLine();

                }

            }

            scannerFile.close();

        }

        catch (FileNotFoundException e) 
        {

            System.out.println("File could not be found");;

        }

        //following gets user input and runs

        Scanner userInput = new Scanner(System.in);

        NumberFormat money = NumberFormat.getInstance(); //for format with comma

        money.setGroupingUsed(true);

        double costDay = 0;

        System.out.println("Enter the day:");

        int choice = userInput.nextInt();

        userInput.nextLine();

        if (choice < 1 || choice > 12)//runs if choice is invalid

        {

            System.out.println("Invalid Choice");

        }

        else

        {

            System.out.println("Your gifts for the day " + choice + " are: \n");

            //calculates the day cost and prints gift simultaneously

            for(int i = 0; i < choice; i++)

            {

                System.out.println((i + 1) + gifts[i]);

                costDay = costDay + costGifts[i];

            }

            //prints the calculated cost.

            System.out.println("\nCost of Day: $" + money.format(costDay));

            System.out.println("\nTotal Cost for Twelve Days: $" + total);

        }

    }

}

Вывод:

Enter the day:
3
Your gifts for the day 3 are: 

1 Patridge in a Pear Tree
2 Turtle Doves
3 French Hen

Cost of Day: $0

Total Cost for Twelve Days: $

gifts.txt

1 Patridge in a Pear Tree
2 Turtle Doves
3 French Hen
4 Calling Birds
5 Gold Rings
6 Geese-a-Laying
7 Swans-a-Swimming
8 Maids-a-Milking
9 Ladies Dancing
10 Lords-a-Leaping
11 Piper
12 Drummers Drumming

cost.txt

220.13
595.13
776.63
1376.59
2126.59
2516.59
15641.59
15699.59
23252.43
33252.43
36056.83
39094.93

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

При сканировании документа cost.txt возникли некоторые проблемы.

В тексте нет значения типа Integer, поэтому функция hasNextInt () всегда будет возвращать false.

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

Я изменил ваш код следующим образом

Сначала я изменил тип Total с String на Double

Затем я изменил ваш раздел сканирования с этого:

 while (scannerFile.hasNextInt()) {

            scannerFile.next();

            if(scannerFile.hasNextInt())

            {

                int i = scannerFile.nextInt();

                double cost = scannerFile.nextDouble();

                costGifts[i-1] = cost;

            }

            else
            {

                scannerFile.nextInt();

                total = scannerFile.nextLine();

            }

        }

        scannerFile.close();

На это:

int i = 0;
        while (scannerFile.hasNextDouble()) {


                double cost = scannerFile.nextDouble();
                costGifts[i] = cost;                    
                i++;                    
                total += cost;                                               

        }

        scannerFile.close();

    }

Теперь сумма рассчитывается правильно, пока вы читаете каждую строку, и вы также убедитесь, что выне пропускают ни одной строки.

0 голосов
/ 06 декабря 2018

Проблема заключается в том, что вы используете scannerFile.hasNextInt () при оценке cost.txt.Файл cost.txt содержит только double, поэтому первый вызов возвращает false, поэтому массив costGifts [] никогда не заполняется.

Попробуйте вместо этого использовать scannerFile.hasNextDouble () и посмотрите, решит ли это вашу проблему.

...