【问题标题】:Try and catch both executing in JAVA [duplicate]尝试在 JAVA 中捕获两者都执行 [重复]
【发布时间】:2021-08-13 05:36:55
【问题描述】:

当用户输入字符串时,我正在尝试检查整数、“”和“”。每件事都按预期工作,但是当我传递一个空字段时,它会验证并打印无效输入。除此之外,它还打印来自 catch 的 println 语句。下面是我的代码和实际输出。

package com.assessment;

import java.util.Scanner;

public class MaxCharString {

    public static void main(String[] args) {
        int i, j, count = 0, maxcount = 0;
        System.out.println("Enter a string to find the maximum character.");
        Scanner input = new Scanner(System.in);
        String character = input.nextLine().toLowerCase();
        try {
            if (character == "") {
                System.out.println("Invalid Input");
            }
            int inputCharacter = Integer.parseInt(character);
            System.out.println(inputCharacter + " is not a valid Input. Please try again.");
        } catch (NumberFormatException e) {
            char result = 0;
            char ch[] = character.toCharArray();
            for (i = 0; i < ch.length; i++) {
                count = 0;
                for (j = 0; j < ch.length; j++) {
                    if (ch[i] == ch[j]) {
                        count++;
                    }
                    if (maxcount < count) {
                        maxcount = count;
                        result = ch[i];
                    }
                }
            }
            System.out.println("Maximum count of occuring character in the string is: " + result);
            input.close();
        }
    }
}

输出:

Invalid Input
Maximum count of occuring character in the string is:  

谁能帮我解决这个问题。谢谢。

【问题讨论】:

    标签: java string validation try-catch parseint


    【解决方案1】:

    你的问题将是等号。

    必须使用your_string.equals("") 检查字符串。

    如果要检查单个字符,则必须使用单引号和双等号。例如。 your_char = ' '.

    这整个事情有点不对劲,因为您检查的是字符串,而不是字符,而且您还使用了错误的等号。

        String character = input.nextLine().toLowerCase();
        try {
            if (character == "") {
                System.out.println("Invalid Input");
            }
    

    像这样修复它:

        //Better name.
        String line = input.nextLine().toLowerCase();
        try {
            if (line.equals("")) {
                System.out.println("Invalid Input");
            }
    

    这也有点奇怪,因为您通常不会将 catch 用于真正的逻辑。 Catch 是针对意外错误。如果您要为有效任务分支,请使用 if-else。

    仅供参考,最简单的调试方法是跳入调试器并逐行查看它在哪里以及什么是意外的。

    为什么它会成功?

    正如 cmets 所指出的,您正试图将一个空值解析为一个不起作用的整数。此外,您应该在进入异常时记录异常,以便了解“为什么”进入捕获状态。 e.printStackTrace() 如果您将其添加为 catch 中的第一行,您就会明白这一点。

    【讨论】:

    • 它也不适用于 string.equals("") 。我不明白为什么它会进入 catch 块。
    • @SambidRijal 因为 try scoop int inputCharacter = Integer.parseInt(character); 中的这一行而进入了捕获范围,您正在尝试解析一个可以为空的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2012-09-03
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多