2016-11-01 17 views
-3

二重符号を読み取り、正方形を印刷するコードを作成しようとしていますが、ユーザーが負の定数または非倍精度定数を入力して新しい数。私はInputMismatchExceptionに問題があります。私のコードは正しく動作せず、コンパイルされますが、コンパイラは永遠に実行されます。どんな提案も役に立ちます。InputMismatchExceptionが正しく使用されていない問題

import java.util.*; 
class constants 
{ 
public static void main(String[] args) 
{ 
    double constant = getConstant(); 
    System.out.println("Square of " + constant + " = " + constant*constant); 
} 
//------------------------------------------------------------------------------- 
public static double getConstant() 
{ 
Scanner kb = new Scanner(System.in); 

System.out.println("Enter non-negative double constant"); 

double constant = kb.nextDouble(); 
try { 
     double selection = kb.nextDouble(); 
    } 


    catch (InputMismatchException e) // where there is error. 
     { 
      System.out.println("Not a double constant. Re-enter"); 

    } 
    return constant; 
    } 

} 

答えて

0

私はあなたが15.65145.95などとして入力などの値にユーザーを探していますが、-5.85(マイナス)と11(整数値)が拒否されるべきであるとされていることを理解しています。実際には、Javaで任意の整数はまた、二重

例です:

double x = 100; // is correct 
double y = -15.85 // is correct 

そこで彼らは、入力不一致例外を生成しません。そのためには、これらの条件が満たされていることを明示的にチェックする必要があります。また、明示的にInputMismatchExceptionをスローする必要があります。

あなたがする必要はありません(たとえば、ループ内であなたがgetConstantを(呼び出して使用する場合それ以外の場合は、あなたが問題に直面する可能性があります))グローバル静的変数として例えば、一度お使いのスキャナを定義することも

優れています選択double値を定義します。ここではここ

import java.util.InputMismatchException; 
import java.util.Scanner; 

class Constants 
{ 
    private static Scanner kb = new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     double constant = getConstant(); 
     if (constant >= 0) { 
      System.out.println("Square of " + constant + " = " + constant*constant); 
     } 
    } 
    //------------------------------------------------------------------------------- 
    public static double getConstant() 
    { 

     System.out.println("Enter non-negative double constant"); 

     double constant=-1.0D; 
     try { 
      constant = kb.nextDouble(); 
      // you don't want the negative value neither the integer value 
      // so you reject them by throwing the InputMismatchException 
      if (constant <0 || Math.floor(constant) == constant * 1.0D) { 
       constant = -1.0D; 
       throw new InputMismatchException("Not a double constant. Re-enter"); 

      } 
     } 

     catch (InputMismatchException e) // where there is error. 
      { 
       System.out.println("Not a double constant. Re-enter"); 
     } 
     return constant; 
     } 
} 
0

の作品イラストは、あなたがキャッチする必要がある例外はNumberFormatExceptionがあり、それはどのように行うことができるかです。一つのことですが、負の数は四角形を持つことができますが、平方根を持つことはできません。

public static void main(String[] args) { 
    Scanner kb = new Scanner(System.in); 
     try { 
     double temp = kb.nextDouble(); 
     //If the input is not a double, catch the number format exception 
     } catch (NumberFormatException e) { 
     e.printStackTrace(); 
     } 
     //If the number is in proper format, (can be negative) print its square. 
     System.out.println("Square of " + temp+ " = " + temp*temp); 
    } 

何らかの理由で、負の数の正方形を印刷したくない場合は、結果を印刷する前にその条件をチェックしてください。

関連する問題