Java 中的 try/catch

2023-11-21

有人可以给我提示为什么这个尝试和捕获不起作用吗? 它抛出扫描仪异常,而不是打印我期望的消息。

import java.util.*;
import java.io.*;
import java.math.*;
import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        Boolean test = true;
        while (test == true) {
            try {
                double x, y;
                String operator;
                Scanner scan = new Scanner(System.in);
                Scanner scan_2 = new Scanner(System.in);
                Scanner ScanOperator = new Scanner(System.in);
                System.out.println(" Enter a double value: ");
                x = scan.nextDouble();
                System.out.println(" Enter another double value: ");
                y = scan_2.nextDouble();
                System.out.println(" Enter a operator for the operation you want to execute, or X if you want to quit: ");
                operator = ScanOperator.nextLine();
                if (operator.equals("x") || operator.equals("X")) {
                    test = false;
                    System.out.println("No calculation was made!!!");
                }
                System.out.println(Calculation(operator, x, y));
            } catch (NumberFormatException nfe) {
               JOptionPane.showMessageDialog(null,"Input must be a number.");
            }
        }
    }

    public static double Calculation(String operator, double x, double y) {
        double result = 0;
        double myAdd = 0;
        double mySub = 0;
        double myMult = 0;
        double myDiv = 0;
        double myPower = 0;
        double myMod = 0;

        if (operator.equals("+")) {
            myAdd = x + y;
            result = myAdd;
        } else if (operator.equals("-")) {
            mySub = x - y;
            result = mySub;
        } else if (operator.equals("*")) {
            myMult = x * y;
            result = myMult;
        } else if (operator.equals("/")) {
            myDiv = x / y;
            result = myDiv;
        } else if (operator.equals("^")) {
            myPower = Math.pow(x, y);
            result = myPower;
        } else if (operator.equals("%")) {
            myMod = x % y;
            result = myMod;
        } else {
        }

        return result;
    }
}

很简单,程序抛出了ScannerException,但是你的try catch只能捕获NumberFormatException,你需要添加另一个catch子句才能捕获ScannerException,或者只捕获通用的Exception。

例如,当你说:

 } catch (NumberFormatException nfe) {     
     JOptionPane.showMessageDialog(null,"Input must be a number.");
 }

这只是指定如何捕获 NumberFormatException。
为了捕获所有异常,您需要这样做:

 } catch (NumberFormatException nfe) {     
     JOptionPane.showMessageDialog(null,"Input must be a number.");
 }catch (Exception e){
     JOptionPane.showMessageDialog(null,"Generic exception caught");
 }

在这种情况下,第二个 catch 将获取第一个 catch 中未捕获的所有内容,因为所有异常都扩展了 Exception 类,您可以使用该语句捕获所有派生类。

然而,由于捕获异常本身是不受欢迎的,你也可以这样做:

 } catch (NumberFormatException, ScannerException e) {     
     JOptionPane.showMessageDialog(null,"Input must be a number.");
 }

在同一块中捕获两个异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的 try/catch 的相关文章

随机推荐

  • AngularJS:观察高度变化的更好方法

    我遇到了旧的可变高度导航问题 Aposition fixes顶部导航和内容margin top naviHeight以下 当数据异步加载时 导航可以改变高度 因此内容的边距也必须随之改变 我希望这是独立的 因此 没有加载数据的代码 而仅在涉
  • 如果锁定的对象内部发生异常,该对象是否会保持锁定状态?

    在 C 线程应用程序中 如果我要锁定一个对象 比如说队列 如果发生异常 该对象是否会保持锁定状态 这是伪代码 int ii lock MyQueue MyClass LclClass MyClass MyQueue Dequeue try
  • 使用 OpenSSL 读取证书文件时出现 Ruby 错误

    我正在尝试做一个简单的OpenSSL X509 Certificate new File read testuser p12 来自IRB与红宝石 1 8 7 或 1 9 2 两者结果相同 我得到的错误是OpenSSL X509 Certif
  • 使用包含空格的文件名的 GNUMake 最可靠的方法是什么?

    我想使用 GNUMake 运行基于规则的 makefile 该文件在目录结构中 在 Windows 文件系统上 构建一组 C 文件 根目录 部分子目录和部分文件包含空格 示例文件 C Documents and Settings
  • 命名和未命名匿名 Javascript 函数之间的差异

    通常 在 Javascript 中 当我想将匿名 内联函数作为参数传递给另一个函数时 我会执行以下操作之一 someFunctionCall function someFunctionCall gt 然而 我最近继承了一个使用的代码库nam
  • 提示与密码 EditText 右侧对齐

    我正在研究阿拉伯语并开展活动 我希望用户名和密码的提示从右侧开始 并且从左侧开始输入没有问题 但在我的用户界面中 我希望提示位于右侧 但是当我为 EditText 添加 inputType 时 提示会移到左侧 我尝试以编程方式解决它 但它不
  • 从 postgres 中的路径中分离出文件名

    我有一个包含 Windows 文件路径的字段 如下所示 fs1 foo bar snafu txt c this is why i drink snafu txt fs2 bippity baz zip fs3 boppity boo ba
  • Haskell 使用 -O2 进行编译会大大增加内存使用量

    当使用 ghc 不使用任何标志进行编译时 这个简单的程序在恒定内存空间中运行 import Data List f x x x g a foldl f a 1 1073741824 1 main do putStrLn show foldl
  • 在 Android 中使用特定于构建的 aaptOptions(用于排除特定资产文件/文件夹)

    一直在开发 Android Webview 应用程序 我刚刚开始使用其中的 node modules 文件夹 所以很自然地我做了一些关于如何排除它的研究 最终得到了这个问题在这里 尝试了一些答案 最适合我的答案是关于 aaptOptions
  • 推送通知在 iOS 10 上不工作

    安装 iOS 10 的新更新后 推送通知不起作用 而相同的代码实现适用于 iOS 9 iOS 10 的推送通知有什么新功能吗 因为 我无法弄清楚 另外 是否需要在功能下打开推送通知 需要对带有 xCode 8 GM 的 iOS 10 进行一
  • 如何使用 AWS CDK 查找现有 ApiGateway

    我正在使用 AWS CDK 构建我的 lambda 并且我想从 lambda 的 CDK 堆栈注册终端节点 我发现我可以使用 fromRestApiId scope id restApiId 获取现有的 ApiGateway 构造 文档在这
  • 设置自动增量列的起始值

    我有一张桌子Orders包含以下字段 身份证 小计 税务 运输 创建日期 The Id列设置为autoincrement 1 1 这将在电子商务店面中使用 有时 当前的电子商务商店会迁移到我的平台 并且他们已经有订单 这可能意味着他们当前的
  • 清除所有旧的 CMFEditions 版本

    我们有一个巨大的网站 应该为开发副本准备数据库 如何删除所有内容项的所有旧历史版本 通过这种方式 我们可以大大减少传输到开发人员计算机所需的数据大小 克隆人4 0 转到portal purgepolicy 并将数字设置为某个数字 我通常使用
  • 如何将输入的第一个字母大写?

    我目前正在尝试将输入中的第一个字母大写 这是我尝试过的 fieldset input text transform capitalize 但它并没有按照我想要的方式工作 因为每个单词都是大写的 我也尝试过这个 fieldset input
  • 关注 iPhone 上的下一个有效关键视图

    iPhone 是否有同等功能NSResponder方法 selectNextKeyView or nextValidKeyView来自 Mac OS X 我知道关于 becomeFirstResponder方法 但是当视图层次结构变得更加复
  • 您能详细解释一下.el、getEl()、Ext.get()吗?

    我是 Sencha ExtJs 的新手 我没看懂这行Ext getCmp component id getEl hide 有什么用 getEl 我可以写吗Ext getCmp component id hide 直接地 并向我解释一下 el
  • java.time:日期“20150901023302166”的 DateTimeParseException [重复]

    这个问题在这里已经有答案了 LocalDateTime parse 20150901023302166 DateTimeFormatter ofPattern yyyyMMddHHmmssSSS 给出错误 java time format
  • 检查 PHP 中是否为多字节字符串

    我想检查 PHP 上是否是字符串类型多字节 知道如何实现这一点吗 Example 也许 规则8字节 I read 可变宽度编码 WIKI and UTF 8 维基百科 有两种解释 首先 每个字符都是多字节
  • 在 PHP SoapClient 中禁用证书验证

    Summary 有没有办法强制 PHP 中内置的 SoapClient 类通过 HTTPS 连接到具有无效证书的服务器 我为什么要这么做 我已在还没有 DNS 条目或证书的服务器上部署了一个新应用程序 我想尝试使用 SoapClient 连
  • Java 中的 try/catch

    有人可以给我提示为什么这个尝试和捕获不起作用吗 它抛出扫描仪异常 而不是打印我期望的消息 import java util import java io import java math import javax swing public