Java 如何显示异常?
我正在检查用户输入的号码是否为Zeckendorf,如果不是,我想显示一个异常,我该怎么做?还有,我如何将Zeckondorf转换为其十进制等价物Java 如何显示异常?,java,exception,converter,Java,Exception,Converter,我正在检查用户输入的号码是否为Zeckendorf,如果不是,我想显示一个异常,我该怎么做?还有,我如何将Zeckondorf转换为其十进制等价物 import java.util.Scanner; public class IZeckendorfNumberConvertor { static String number; int zeckonderEquivalent; static Scanner scanner = new Scanner(System.in); public st
import java.util.Scanner;
public class IZeckendorfNumberConvertor {
static String number;
int zeckonderEquivalent;
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
convertToZeckonderNumber();
isTrueZeckonderNumber();
}
private static boolean isTrueZeckonderNumber() {
System.out.println("Enter a Zeckonder Number:");
number = scanner.nextLine();
if (number.equals("10100"))
{
return true; }
else if (number.equals("010011") || number.equals("010100"))
{
return false; }
return false;
}
private static void convertToZeckonderNumber() {
}}
要显示异常是什么意思? 我建议只给用户反馈,因为异常通常用于不应该发生的异常操作 但是,如果您愿意,您可以打印一条消息来解释发生了什么
try {
} catch (Exception e) {
System.out.println(e.getMessage());
}
您可以使用简单的
if
向用户打印一条错误消息,说明输入错误
if(yourCondition){
// Happy scenario
// Go shead
}else{
// Error Scenario
System.out.println("Error. Invalid Input.");
// If you persist to throw an exception, then you can do something like this
// throw new Exception("Exception Explanation"); // I've commented this, but you can uncomment it if needed
// But the advice is to display an error message, than throw a exception.
}
关于转换,你可以像这样把二进制转换成十进制
int i = Integer.parseInt(binaryString, 2); // 2 indicates the radix here, since you want to convert from binary.
我建议您不要显示异常(即跟踪等),因为它对用户非常不友好。 您可以使用throw语法抛出适当的异常:
throw new Exception("Given number is not a Zeckendorf number");
但一定要捕捉到它,并显示一条简洁明了的信息:
try {
// Your input code goes here
} catch (Exception e) {
System.out.println(e.getMessage());
}
另一个更简单的选择是只检查方法的返回值并相应地打印结果
我建议您使用后一种解决方案,因为当您的程序中发生了不好的和意外的事情,并且您希望优雅地处理它时,会使用异常。在您的情况下,行为是预期的(即用户给出了错误的数字),因此检查返回值将更加清晰和容易。使用此代码段,您可以将字符串转换为整数:
int numberAsInt;
try {
numberAsInt = Integer.parseInt(number);
} catch (NumberFormatException e) {
//Will throw an Exception
}
如果您想创建自己的异常类,您可以像图中所示那样创建,也可以使用
throw new RuntimeException("Your Message");
我的意见是,你可以试试下面的方法
public static void main(String[] args) {
if(!isTrueZeckonderNumber()){
// your message should goes here
System.out.println("Your message");
}
}
private static boolean isTrueZeckonderNumber() throws Exception{
System.out.println("Enter a Zeckonder Number:");
number = scanner.nextLine();
if (number.equals("10100")) {
return true;
} else{
throw new Exception("your message");
}
}
如果您真的想抛出异常,请执行以下操作
public static void main(String[] args) {
if(!isTrueZeckonderNumber()){
// your message should goes here
System.out.println("Your message");
}
}
private static boolean isTrueZeckonderNumber() throws Exception{
System.out.println("Enter a Zeckonder Number:");
number = scanner.nextLine();
if (number.equals("10100")) {
return true;
} else{
throw new Exception("your message");
}
}
使用try catch块捕获异常
try {
} catch (Exception e) {
e.printStackTrace();
}
还可以使用throw来抛出新异常
假设您确实希望显示异常,而不是更方便用户的消息,第一步可能是将异常获取为字符串。然后,您可以使用该字符串执行您喜欢的操作(回显到控制台,放入javax.swing.JTextArea,通过电子邮件发送,等等) 如果您只想从异常中获取消息,则getMessage()将执行以下操作: 但是,如果您想要整个异常、堆栈跟踪和所有异常,您将需要如下内容:
public static String stackTrace(Exception e) {
StringWriter w = new StringWriter();
e.printStackTrace(new PrintWriter(w));
return w.toString();
}
// ...
try { ... }
catch(FooException e) {
String st = stackTrace(e);
}
如果您只想将完整堆栈跟踪回显到控制台,则有printStackTrace(),无arg方法:
try { ... }
catch(FooException e) {
e.printStackTrace();
}
如果您想更多地控制堆栈跟踪的显示,可以通过以下方式获得详细信息:
try { ... }
catch(FooException e) {
StackTraceElement[] stes = e.getStackTrace();
// Do something pretty with 'stes' here...
}
你确定你想要一个异常,而不仅仅是一条反馈消息吗?是的,一个异常,它必须在最后一段抛出一个异常+1:在这种情况下,使用布尔返回值要干净得多。