如何显示例外?

时间:2013-11-04 12:00:11

标签: 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 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() {

}}

7 个答案:

答案 0 :(得分:6)

我建议你不要显示异常(即跟踪等),因为它非常不友好。 您可以使用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());
}

另一个更简单的选择是只检查方法的返回值并相应地打印结果。

我建议使用后一种解决方案,因为当你的程序中发生了一些不良和意外的事情并且你想要优雅地处理它时会使用异常。在您的情况下,行为是预期的(即用户给出错误的数字),因此检查返回值将更加干净和简单。

答案 1 :(得分:4)

使用try catch块捕获异常

            try {

            } catch (Exception e) {

                e.printStackTrace();
            }

还使用throw for throw一个新的异常

enter image description here

答案 2 :(得分:2)

假设确实想要显示异常,而不是更友好的用户消息,第一步可能是将异常作为字符串。然后,您可以使用该字符串执行您喜欢的操作(回显到控制台,放在javax.swing.JTextArea中,通过电子邮件发送它等)。

如果只是想要来自异常的消息,那么getMessage()将会这样做:

try { ... }
catch(FooException e) {
    String msg = e.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(),无法方法:

try { ... }
catch(FooException e) {
    e.printStackTrace();
}

如果您想更多地控制堆栈跟踪的显示,可以通过以下方式获取详细信息:

try { ... }
catch(FooException e) {
    StackTraceElement[] stes = e.getStackTrace();
    // Do something pretty with 'stes' here...
}     

答案 3 :(得分:1)

您想要显示例外是什么意思? 我建议只是给用户反馈,因为异常更常用于不应发生的异常行为。

但是,如果您愿意,可以打印一条消息,说明发生的事情。

try {

} catch (Exception e) {
    System.out.println(e.getMessage());
}

答案 4 :(得分:1)

您可以使用简单的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.

答案 5 :(得分:1)

使用此代码段,您可以将String转换为整数:

int numberAsInt;
    try {
          numberAsInt = Integer.parseInt(number);
    } catch (NumberFormatException e) {
          //Will throw an Exception
    }

如果要创建自己的Exception类,可以像显示here那样执行,或者只使用

抛出RuntimeException
throw new RuntimeException("Your Message");

答案 6 :(得分:1)

我的意见是,您可以尝试以下内容

 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");
    }        
}