首页 > 解决方案 > 当用户输入 == null 时使用 try-catch 捕获异常但它不起作用

问题描述

如果用户没有在两者或其中一个上输入任何内容,则 try-catch 应该会捕获,但现在它什么也不做。如果你输入一个句子而不是一个字符,它会崩溃,反之亦然。我对Java很陌生,但这是我所拥有的:

import javax.swing.*;

public class Main {

public static void main(String[] args) {
    countSentence();
}

static void countSentence() {
    String input;
    char ch;
    int count = 0;
    int countLetters = 0;

    
    input = JOptionPane.showInputDialog(null, "Write a sentence");

    ch = JOptionPane.showInputDialog(null, "Write a character").charAt(0);

    if (!input.equals("") || ch != ' ') {
        try {
            for (int i = 0; i < input.length(); i++) {
                if (input.charAt(i) != ' ')
                    count++;
            }


            for (int i = 0; i < input.length(); i++) {
                if (input.charAt(i) == ch)
                    countLetters++;
            }

            JOptionPane.showMessageDialog(null,
                    "The sentence has " + count + " characters \n" + "The character " + ch
                            " occurs " + countLetters + " times. " +
                            "First time at index place " + input.indexOf(ch) +
                            "\n Last time at index place " + input.lastIndexOf(ch));
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(null, "You need to input both a sentence and a character!");
        }
    }

}

}

标签: javaexceptiontry-catchjoptionpane

解决方案


在这里你引用第一个位置的字符

ch = JOptionPane.showInputDialog(null, "Write a character").charAt(0);

但是,如果用户没有输入某些内容,则代码将失败,并出现索引超出范围异常。

我会像这样重写

static void countSentence() {
String input;
String ch;
int count = 0;
int countLetters = 0;



input = JOptionPane.showInputDialog(null, "Write a sentence");

ch = JOptionPane.showInputDialog(null, "Write a character");

if (input.equals("") || ch.equals("")) {
    JOptionPane.showMessageDialog(null, "You need to input both a sentence and a character!");
} else {        
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) != ' ')
                count++;
        }

        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ch.charAt(0))
                countLetters++;
        }

        JOptionPane.showMessageDialog(null,
                "The sentence has " + count + " characters \n" + "The character " + ch +
                        " occurs " + countLetters + " times. " +
                        "First time at index place " + input.indexOf(ch) +
                        "\n Last time at index place " + input.lastIndexOf(ch));
    }        
} }

不要将 try-catch 用于流控制。请参阅: https ://wiki.c2.com/?DontUseExceptionsForFlowControl


推荐阅读