Java 如何显示异常?

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

我正在检查用户输入的号码是否为Zeckendorf,如果不是,我想显示一个异常,我该怎么做?还有,我如何将Zeckondorf转换为其十进制等价物

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:在这种情况下,使用布尔返回值要干净得多。