2016-09-29 3 views
-7

Итак, я написал эту программу, но по какой-то причине инструкция else не будет работать. Если я ввожу «e», например, моя программа просто сработает ... когда ее на самом деле предполагается вернуть «Invalid Input» Может ли кто-нибудь помочь мне?Программа не будет работать должным образом

================================================================================================================================== ===========================

import java.util.Scanner; 

public class AbsValue2 { 
    public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    System.out.println("Enter a number:"); 
    String num = input.nextLine(); 
    Double num2 = new Double(Double.parseDouble(num)); 
    Double abs_val = new Double(Math.sqrt(num2 * num2)); 

    if (num.matches("[+-]?[\\d]+[.]*")) 
    System.out.println("The absolute value of " + num + " is |" + abs_val + "|"); 
    else if (num.matches("[+-]?[\\d]*.[\\d]+")) 
    System.out.println("The absolute value of " + num + " is |" + abs_val + "|"); 
    else 
    System.out.println("Invalid input"); 

    } 
} 
+0

Вы пытаетесь разобрать его, прежде чем вы проверите, действительно ли он. – khelwood

+0

Легкое исправление было бы обернуть в try и catch, а в вашем выводе недействительный вход! – ApolloSoftware

ответ

2

проблема здесь:

Double num2 = new Double(Double.parseDouble(num)); 

если Num является " e ", тогда вы получите NumberFormatException.

Вы можете использовать Scanner.hasNextDouble{}, чтобы проверить или попробовать/уловить это исключение.

0

Ваш код бросает NumberFormatExceptionперед КРП будет достигнуто заявление, из-за этой линии:

Double num2 = new Double(Double.parseDouble(num)); 

Вам необходимо проверить правильность перед тем разбор его.

Смежные вопросы