2017-07-30 14 views
-4

私のプログラムは、10進数を入力した場合にのみ動作します。しかし、私が整数を入力すると、それはまだ実行されます。それはあなたが達成したい何を私にcompletellyはっきりしていない10進数の形式にする必要があります。

import java.util.*; 

public class Welcome{ 

     public void CelFar(){ 

     Scanner decimal = new Scanner(System.in); 
     System.out.println("Enter a decimal number: "); 

     try{ 


      double value = decimal.nextDouble(); 
      value = ((value - 32)*5)/9; 

      System.out.println("RESULT : " +value); 


      } 
      catch(InputMismatchException e){ 
       System.out.println("Must be in decimal number ! "); 
      } 


     } 


    } 
+1

あなたがそれに.0' '追加しているかのように、小数点のない数が同じ値を持っています。なぜこれが問題なのですか? – Mureinik

+0

私のプログラムは10進数でのみ実行する必要があります。たとえば、整数を入力するとします。エラーがなければなりません。どのようなコードにする必要があります – Simba

+0

@JoeC私のプログラムは10進数でのみ実行する必要があります。たとえば、整数を入力するとします。エラーがなければなりません。どのコードが – Simba

答えて

0

助ける必要があります。

  1. べきプログラムのリターンエラー入力値が例えば1.0であれば?
  2. 入力値が1の場合、プログラムはエラーを返しますが、1.0の場合はエラーですか?

答えが(1)の場合、返される10進数をintまたは(精度を失うことなく)変換できるかどうかを検証します。 答えが(2)(そうそうです)私は単にnextDouble()の代わりにStringを返すscanner.next()を使用します。実際にdoubleに変換する前にStringをintに変換できるかどうかを検証します。

0

あなたが本当に42は誤りであることを、しかし42.0は許容できると、彼らは両方ともまったく同じ数であっても、hasNextXxxメソッドを呼び出すことにより、最初の入力を確認したい場合。

これは、不正な入力をキャッチするために例外を使用するという問題も解決します。小数点を使用して

Scanner decimal = new Scanner(System.in); 
for (;;) { // forever loop 
    System.out.println("Enter a decimal number: "); 
    if (decimal.hasNextDouble() && ! decimal.hasNextBigInteger()) { 
     double value = decimal.nextDouble(); 
     value = ((value - 32)*5)/9; 
     System.out.println("RESULT : " +value); 
     break; // exit forever loop 
    } 
    decimal.next(); // consume bad token 
    System.out.println("Must be in decimal number ! "); 
} 
0

あなただけの小数の場合と同様に、あなたのプログラムを動作させたい場合は、あなたが1つのハックを試すことができ、

1 - あなたは文字列にあなたの番号を変換することができます

2 - スプリット文字列0より大きい場合、それはdecimaで0か

、4-よりも大きいかどうかの文字

、3-番号に小数点以下の変換文字列を見つけると、 L番号と、その後は、アクションに

5を実行しない場合は、それ全体の数とスロー例外

関連する問題