java - 当用户输入 == 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!");
}
}
}
}
解决方案
在这里你引用第一个位置的字符
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
推荐阅读
- delphi - Delphi中的Producer和ProducerContent有什么区别?
- c - 诸如全局整数之类的宏在内存中存储在哪里?
- r - 更改月份名称和年初至今或 POSIXct
- javascript - 重新调查“尝试根据选择显示不同的 HTML 段落”
- bash - 在不破坏当前脚本的情况下捕获源 shell 脚本的退出代码
- python - CSV 到嵌套的 JSON Pandas/Python - 3 级嵌套
- javascript - 带有登录的 TestCafé 数据驱动测试
- javascript - 为什么在加载路由时我的错误条件元素会闪烁?
- python - 如何在python中有效地将单词转换为整数以用于计算
- c - 在 main 函数中使用变量通过 main 之外的 malloc 定义数组的大小?