2017-01-16 10 views
3

それは私の最初の質問ですが)誰かが助けることを願って:倍増するためのJava> int型(スキャナ>のSystem.out)

私は次のprogramm書き込みをしようとしている: だから私は、1点の入力と最大2出力 ファーストを持っています私は入力が(int!) かどうかをチェックしています。TRUEの場合、 "YES IT IS INTEGER"と表示され、 "saved int in varaible int"と表示されます。

アウトメッセージ=( "それはINTではありません)+ とダブルフォーマットで表示してください!

すべては問題ありませんhile私はintを入れますが、私がダブルを置くと正しいものではありません。

public class Scan { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     int check; 
      System.out.println("Your number? "); 

     if(sc.hasNextInt()){ 
     check=sc.nextInt(); 
      System.out.println("OKEI "+check+ " IT IS INTEGER! ");} 
     else if(sc.hasNextDouble()){ 
     check=sc.nextDouble(); 
      System.out.println("Nooo " + check + " NO it is not INT"); 
      } 
    } 

} 
+0

「ダブルを入れたときは正しくない」 – Jens

+0

@Jens彼はおそらく彼が 'double'を入力したことを意味しますが、それは整数のように振る舞います(なぜなら、' double'入力を格納する変数_is_整数)。 –

+0

ダブルフォーマットはロケールの使用に依存することに注意してください。システム構成によっては、Doubleが '1.25'または' 1,25'になる可能性があります。 – AxelH

答えて

2

一つの解決策ではなくdoubleとしてcheckを持つ、とにチェックを変更されています。あなたのソリューションでは

if (check == Math.floor(check)) 

、あなたはintdoubleを割り当てるしようとしています。それは適合しないので、精度が緩くなり、切り捨てられます。新しい二重の変数を作成し、その二重の変数にsc.nextDouble()を割り当てる

Scanner sc = new Scanner(System.in); 
check = sc.nextDouble(); 
if (check == Math.floor(check)) { 
    // an "int" 
} else { 
    // not integer 
} 
+0

'if(check - (int)check == 0)しかし、これは大きな違いはありません。 – AxelH

+0

Maroun Marounありがとう、私は初めて数学ライブラリを使用しないと思う)確かに快適だ) – Moka017

2

最終的な解決策は次のようになります。

例: double checkDouble; .... double値に

else if(sc.hasNextDouble()){ 
    checkDouble=sc.nextDouble(); 
     System.out.println("Nooo " + check + " NO it is not INT"); 
     } 
+0

))働いている)))シンプルで清潔) – Moka017

0

キャストint型、それは役立つかもしれません。

else if (sc.hasNextDouble()) { 
      check = (int) sc.nextDouble(); 
      System.out.println("Nooo " + check + " NO it is not INT"); 
     } 
+0

私は1.25を入力し、私のメッセージは(Nooo 1 NO it INTはそうではありません)1.25は1に変換されます(私は同じ== 1.25を持っています) – Moka017

1

Eclipseでコードをしようとしますが、(checkintある)check = sc.nextDouble()を使用して、エラーアンがあった、あなたがそのようにそれを修正することができます。

public static void main(final String[] args) { 
    System.out.println("Your number? "); 
    final Scanner sc = new Scanner(System.in); 
    if (sc.hasNextInt()) { 
     final int check = sc.nextInt(); 
     System.out.println("OKEI " + check + " IT IS INTEGER! "); 
    } else if (sc.hasNextDouble()) { 
     final double check = sc.nextDouble(); 
     System.out.println("Nooo " + check + " NO it is not INT"); 
    } else { 
     System.out.println("Failed."); 
    } 
    } 

そのように、あなたはいずれかを失うことはありません小数部はMath.floorまたはキャストを使用します。

+0

ありがとうございました。しかし、私は定数を参照してください(最終的に)なぜそれを使用する必要がありますか? – Moka017

+0

私のEclipseは、すべての変数/パラメータ/メンバーをfinalとして変更しないように設定されているためです。なぜあなたはそれを使用するのだろうか? パラメータ(またはオブジェクトの参照)の変更を禁止する - パラメータ/メンバの場合には重要だと思いますが、変数の場合は少なくなります。 – NoDataFound

関連する問題