当前位置: 首页 > 知识库问答 >
问题:

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

黄骏喆
2024-09-25

编程计算图形的面积。

程序可以计算圆形、长方形、正方形的面积,运行时先输入图形的类型(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元。

共有1个答案

巫墨一
2024-09-25

你这里有几个错误
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!");
        }
    }
}
 类似资料:
  • 该应用程序在模拟器中运行良好,但在手机上安装后,每次启动时都会崩溃,logcat没有显示错误。 发生这样的事我该怎么办?

  • 必须创建一个java应用程序,该应用程序将确定并显示用户输入的数字总和。求和必须在用户希望的时间内进行。当程序结束时,求和必须显示如下,例如,用户输入3个数字:10、12、3=25 并且必须使用while循环

  • 有个项目中有一个less文件,有明白是什么意思吗? 一直有下面的错误,这个怎么解决?

  • v-text-field怎么在输入的时候限制只能输入数字,而且除了数字以外输入其他字符都不显示在输入框里? oninput="value=value.replace(/[^0-9.]/g,'')" ,用这个在本地可以实现,但是更到线上不得行

  • 有没有大佬来帮我看一看,是关于github actions的,我在实现一个推送代码到指定分支上时,会自动触发在远程目标服务器上面部署运行springboot项目,但是每一次运行到以下代码的时候: 它就会一直卡在这里。但是事实上,这一个项目是被正确运行了,监听端口也有信息,但是工作流中会报错: 我有一点不明白,部署成功之后,不就是应该断开ssh连接吗?有没有大佬解决一下? 因为这个地方报错,所以它工

  • 错误如下: 02-11 13:24:31.561 526 2-5262/?E/AndroidRuntime:致命异常:main process:com.example.vicky.project,pid:5262 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.vicky.project/com.example.vicky.pr