输入另外数据时候程序显示错误,该怎么解决呢?

编程计算图形的面积。

程序可以计算圆形、长方形、正方形的面积,运行时先输入图形的类型(1表示圆形、2表示长方形、3表示正方形),然后,判断用户输入图形的类型,对圆形输入半径,对长方形输入长和宽,对正方形输入边长,

以上参数的数据类型均为整型。

计算面积后将其显示出来,要求结果保留两位小数,PI设为3.14即可。

输入分为两部分,第一个数字是 1 表示圆形,2 表示矩形,3 表示正方形,然后是计算面积所需的相应参数。

要求对每个测试实例,在单独一行中输出图形的面积。 如果用户输入的图形类型不合法,给出错误提示:“Invalid Data!”。

我的解决代码是:

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        if(a==1){
            int b= in.nextInt();
            System.out.printf("%.2f",3.14*b*b);
        }
        else if(a==2) {
            double b= in.nextDouble();
            double c = in.nextDouble();
            System.out.printf("%.2f", b*c);
        }
        else if(a==3) {
            Double b= in.nextDouble();
            System.out.printf("%.2f", b * b);
        }
        else{
            System.out.print("Invalid Data!");}

    }
}

虽然我完成了这个题目。但如果输入一部分数据却得不出正确结果让我感到自己技术的匮乏:
如果输入3 2 2,程序输出4.00。
这样是不对的,我在老师的带领下尝试了in.close(),但是不成功。它该如何在输入3 2 2的时候输出Invalid Data!呢?我解决不了,只有把问题公布了,有解答的可以私聊或者加我微信13778097887,我可以给感谢费5元。

阅读 876
1 个回答

你这里有几个错误
1.人家要求输入的都是整型,没必要使用Double
2.你这是各小的demo,Scanner是否关闭,没有影响
3.你没有确定好你的输入方式,是一行全输入,还是逐行输入

Scanner是阻塞式的,由用户来决定是否结束,应用程序只能选择阻塞读取或者丢弃,不能决定用户的下一步行为。Scanner默认是空格分隔的,支持单行空格分隔输入和逐行回车确认输入
你的程序在逐行输入没有问题是因为你放弃了后续的读取,用户还没反应过来,程序结束了
在单行有问题是因为next系列函数都是按照空格分开,逐个将输入给你的,你无法预知全部的输入,仅读取了自己需要的长度

下面的改进代码是两种方式,你自己选择吧

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * <p>demo</p>
 * <p>创建于 2024-09-25 14:42 14:42 </p>
 *
 * @author witt
 * @version v1.0
 * @since 1.0
 */
public class Demo {
    public static void main(String[] args) {
        // 方案1
        multipleLine();
        // 方案2
//        singleLine();
    }

    /**
     * 多行输入,使用换行符
     */
    private static void multipleLine() {
        try (Scanner in = new Scanner(System.in).useDelimiter(System.lineSeparator())) {
            System.out.print("输入选项 >");
            int option = in.nextInt();
            double result;
            switch (option) {
                case 1:
                    System.out.print("计算圆形,输入半径 >");
                    int r = in.nextInt();
                    result = 3.14 * r * r;
                    break;
                case 2:
                    System.out.print("计算长方形,输入长 >");
                    long l = in.nextLong();
                    System.out.print("输入宽 >");
                    long w = in.nextLong();
                    result = l * w;
                    break;
                case 3:
                    System.out.print("计算正方形,输入边长 >");
                    long a = in.nextLong();
                    result = a * a;
                    break;
                default:
                    System.err.print("Invalid Data!");
                    return;
            }

            System.out.printf("%.2f", result);
        } catch (InputMismatchException e) {
            System.err.print("Invalid Data!");
        }
    }

    /**
     * 单行输入
     */
    private static void singleLine() {
        try (Scanner in = new Scanner(System.in)) {
            System.out.print("输入[选项 参数...] >");
            String input = in.nextLine();
            String[] args = input.split(" ");
            int argLength = args.length;
            if (argLength < 2 || argLength > 3) {
                System.err.print("Invalid Data!");
                return;
            }

            int option = Integer.parseInt(args[0]);
            double result;
            switch (option) {
                case 1:
                    if (argLength != 2) {
                        System.err.print("Invalid Data!");
                        return;
                    }
                    int r = Integer.parseInt(args[1]);
                    result = 3.14 * r * r;
                    break;
                case 2:
                    if (argLength != 3) {
                        System.err.print("Invalid Data!");
                        return;
                    }
                    long l = Integer.parseInt(args[1]);
                    ;
                    long w = Integer.parseInt(args[2]);
                    ;
                    result = l * w;
                    break;
                case 3:
                    if (argLength != 2) {
                        System.err.print("Invalid Data!");
                        return;
                    }
                    long a = Integer.parseInt(args[1]);
                    result = a * a;
                    break;
                default:
                    System.err.print("Invalid Data!");
                    return;
            }

            System.out.printf("%.2f", result);
        } catch (NumberFormatException e) {
            System.err.print("Invalid Data!");
        }
    }
}
推荐问题
宣传栏