开发者社区 问答 正文

如果我进行特定输入会给我一个错误[关闭]

这是我的代码:

import java.util.Scanner;

class codingActivity1{

    public static void main(String[] args) {
        System.out.println("Enter a number in base 8:");
        Scanner n = new Scanner (System.in);
        boolean flag;
        String zz = n.nextLine();
        int y = zz.length();
       if (y < 0 || y > 7) {
            System.out.println("ERROR: Incorrect Octal Format");
        flag = false;
        }
        else {
            flag = true;
        }


       for (int i = 0; i < y; i++) {
            if (Integer.parseInt("" + zz.charAt(i)) > 8) {
                System.out.println("ERROR: Incorrect Octal Format");
            }   
        }
      int result= Integer.parseInt(zz,8);
       System.out.println(result);
    }
}

我实际上所做的是将以8为底的基数转换为以10为底的基数。

但是,如果我输入“ 1287”,则会出现此错误

Exception in thread "main" java.lang.NumberFormatException: For input string: "1287" under radix 8
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:658)
    at codingActivity1.main(codingActivity1.java:25)

我该如何解决?

展开
收起
垚tutu 2019-12-04 17:14:42 655 分享 版权
阿里云 AI 助理回答

这个错误是因为你尝试将包含非法八进制数字的字符串转换为整数。在八进制系统中,有效的数字范围是0到7。当你输入"1287"时,字符'8'和'7'超出了八进制的有效范围,导致NumberFormatException

要解决这个问题,你需要在尝试转换之前,先验证输入字符串中的每个字符是否都是合法的八进制数字(即0-7)。你可以通过修改你的代码来实现这一点,增加一个检查每个字符的循环。这里是一个修改后的版本:

import java.util.Scanner;

class CodingActivity1 {
    public static void main(String[] args) {
        System.out.println("Enter a number in base 8:");
        Scanner n = new Scanner(System.in);
        String zz = n.nextLine();
        int y = zz.length();

        // 验证输入的每个字符是否为合法的八进制数字
        boolean isValidOctal = true;
        for (int i = 0; i < y; i++) {
            char c = zz.charAt(i);
            if (c < '0' || c > '7') {
                isValidOctal = false;
                break;
            }
        }

        if (!isValidOctal) {
            System.out.println("ERROR: Incorrect Octal Format");
        } else {
            try {
                int result = Integer.parseInt(zz, 8);
                System.out.println(result);
            } catch (NumberFormatException e) {
                // 这里理论上不会进入,因为我们已经提前验证了输入
                System.err.println("Unexpected NumberFormatException occurred.");
            }
        }
    }
}

在这个修改后的版本中,我添加了一个isValidOctal标志,并在循环中检查每个字符是否落在八进制的有效范围内。如果发现任何非法字符,就立即设置isValidOctalfalse并跳出循环。只有当输入完全验证为合法的八进制数字后,才尝试进行转换。这样可以避免抛出NumberFormatException异常。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: