java,txt文件形式的输出不正确(从控制台输入简单的两个输入值并输出添加值)

时间:2018-05-15 17:17:45

标签: java printwriter

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,I我是java的新手,无法弄清楚这个问题。

1 个答案:

答案 0 :(得分:3)

当我运行它时,我在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;
}