Java, неправильный вывод в виде TXT-файла (просто два введенных значения из консоли и вывести значение сложения)

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

public class Test {
    public static void main(String[] args) throws FileNotFoundException{
        int option = 0;
        int a;
        int b;

        System.out.println("Input the type of the calculation:");

        Scanner in = new Scanner(System.in);
        PrintWriter out = new PrintWriter(new File("C:\\Users\\123\\Desktop\\result.txt"));

        option = in.nextInt();

        System.out.println("Input the two values:");
        System.out.print("a:");
        a = in.nextInt();

        System.out.print("b:");
        b = in.nextInt();

        in.close();

        // the Calculation:
        switch(option) {
        case 1:
            out.write(Integer.toString(a+b));
            System.out.println(a + b);
        case 2:
            out.write(Integer.toString(a - b));
        case 3:
            out.write(Integer.toString(a * b));
        case 4:
            out.write(Double.toString(1.0 * a / b));
        }

        out.flush();
        out.close();
    }
}

Это код, я использую значение a=12, b=4 в качестве тестового примера, и я ввожу 1 для опции (что делает программу добавлением из выбора переключателя), результат System.out.print верно, что равно 16, но результат, полученный с помощью PrintWriter, не является правильным, не только значение, но и тип значения, который является float(или double, но он должен быть int), со значением 168483.0, я действительно новый в Java и не может понять эту проблему.

1 ответ

Решение

Когда я запускаю это, я получаю ожидаемый результат в result.txt файл, но за ним следуют другие цифры.

Это происходит потому, что у вас нет break утверждение в каждом caseТаким образом, сумма (случай № 1) вычисляется, но затем код переходит к вычитанию (случай № 2), затем к умножению и делению, выводя каждый результат в файл без разделителей или символов новой строки для их разделения.

Ваш вывод 168483.0 -- это:
• 12 + 4 = 16
• 12 - 4 = 8
• 12 * 4 = 48
• 12/4 = 3,0
С интервалом это будет выглядеть так: 16 8 48 3.0

Это также хорошая практика, чтобы включить default: случай, например, что если кто-то входит 9 для типа расчета.

Это сделало бы ваш switch Заявление должно выглядеть так:

switch(option) {
    case 1:
        out.write(Integer.toString(a+b));
        System.out.println(a + b);
        break;            // <---- added a "break" for each case
    case 2:
        out.write(Integer.toString(a - b));
        break;
    case 3:
        out.write(Integer.toString(a * b));
        break;
    case 4:
        out.write(Double.toString(1.0 * a / b));
        break;
    default:
        System.out.println("Operations are: 1=add 2=subtract 3=multiply 4=divide");
        break;
}
Другие вопросы по тегам