【发布时间】:2017-10-14 06:14:33
【问题描述】:
我有以下练习要解决:
在本练习中,您将创建两个处理exceptions 的方法。其中一个方法是main() 方法,它将调用另一个方法。
如果在其他方法中抛出异常,main() 必须处理它。将包含finally 语句以指示程序已完成。 main() 将调用的方法将被命名为reverse,它将反转String 中字符的顺序。如果 String 不包含任何字符,则 reverse 会将异常传播到 main() 方法。
- 创建一个名为
Propagate的类和一个main()方法,该方法暂时为空。 - 创建一个名为
reverse的方法。它接受String的参数并返回String。 - 在
reverse中,通过String.length()方法检查String的长度是否为0。如果长度为0,reverse方法会抛出异常。 -
现在包含颠倒
String顺序的代码。由于这不是本章的主题,所以提供了反转代码,您可以自己尝试。字符串 reverseStr = ""; for(int i=s.length()-1;i>=0;--i) { reverseStr += s.charAt(i); } 返回反向字符串;
现在在
main()方法中,您将尝试调用此方法并处理任何潜在的异常。此外,您将包含一个finally语句,当main()完成时显示。
问题是即使String.length()为0也不会抛出异常:
import java.util.*;
import java.util.Scanner;
import java.lang.IllegalArgumentException;
public class TryAndCatch {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter: ");
String entry = keyboard.next();
try {
if (entry.length() == 0) {
}
}
catch (IllegalArgumentException e) {
System.err.println("String can't have 0 characters: " + e.getMessage());
}
System.out.println("The reverse String is : " + TryAndCatch.reverse(entry));
keyboard.close();
}
static String reverse(String text) {
String reverseString = "";
for (int i = text.length() - 1; i >= 0; i--) {
reverseString += text.charAt(i);
}
return reverseString;
}
}
【问题讨论】:
-
当然不会抛出异常。当
entry.length() == 0时,您的代码实际上什么都不做。 -
启动应用的时候总是0。
-
异常不是
String.length()的默认行为,需要自己抛出。在这种情况下你可能不想扭转它 -
好的,我从哪里开始? 1. 你不应该使用 .next() 而应该使用 .nextLine(); 2. String 有一个 .isEmpty() 方法; 3.练习一开始就不好(main()如何处理异常?);等等等等
-
再次阅读问题陈述。 reverse 函数必须抛出一个在 main 方法中捕获的异常。