2016-11-29 7 views
0

オプション4(除算)の浮動小数点除算に明示的な型キャストを使用しているかどうかはわかりません。私は浮動小数点の分割が何であるかを理解する助けが必要です。浮動小数点除算のJava明示型キャスト

2つのオペランドを格納するために整数を使用しなければなりません。結果を格納するには2倍です。オプション4の浮動小数点除算には、明示的な型キャストを使用する必要があります。また、switch文を使用してメニューの選択を処理します。各計算後

import java.util.Scanner; 

public class SimpleCalculator 
{ 
    //----------------------------------------------------------------- 
    // Calculates two integers 
    // using values entered by the user. 
    //----------------------------------------------------------------- 
    public static void main(String[] args) 
    { 
     //Variables 
     final int ADDITION = 1,SUBTRACTION = 2, MULTIPLICATION = 3,DIVISION = 4, EXIT = 5; 
     int num1 = 0, num2 = 0, choice = 0; 
     double dblNum1, dblNum2, result; 
     String equation = ""; 

     do 
     { 
      //Processing 
      equation = ""; 
      Scanner scan = new Scanner(System.in); 
      System.out.println("Choose from the following: "); 
      System.out.println("1. Add 2 integers"); 
      System.out.println("2. Subtract 2 integers"); 
      System.out.println("3. Multiply 2 integers"); 
      System.out.println("4. Divide 2 integers"); 
      System.out.println("5. Exit"); 
      System.out.print("Enter choice: "); 

      choice = scan.nextInt(); 

       if(choice < 5 && choice > 0)//keeps program from asking for two numbers if exiting 
       { 
        System.out.print("Enter first integer: "); 
        num1 = scan.nextInt(); 

        System.out.print("Enter second integer: "); 
        num2 = scan.nextInt(); 
       } 

      //switch for operations 
      switch (choice) 
      { 
       case ADDITION: 
        result = num1 + num2; 
        equation = ((num1) + " + " + (num2) + " = "+ result); 
        break; 

       case SUBTRACTION: 
        result = num1 - num2; 
        equation = ((num1) + " - " + (num2) + " = "+ result); 
        break; 

       case MULTIPLICATION: 
        result = num1 * num2; 
        equation = ((num1) + " * " + (num2) + " = "+ result); 
        break; 

       case DIVISION: 
        if(num2 == 0)//when denominator becomes zero 
        { 
         System.out.println("DIVISION NOT POSSIBLE"); 
         break; 
        } 
        dblNum1 = num1;//convert int to double 
        dblNum2 = num2; 
        result = dblNum1/dblNum2; 
        equation = ((num1) + "/" + (num2) + " = "+ result); 
        break; 

       case EXIT: 
        System.exit(0); 
        break; 

       default: 
        System.out.println("YOU HAVE ENTERED AN INCORRECT CHOICE");    
      } 
      //Output 
      System.out.println(equation); 
      System.out.println(); 
     }while(choice != EXIT); 
    } 
} 
+0

"暗黙のキャスト"は、新しい変数またはより広い型に値を割り当てるときに起こることです。たとえば、 'int'式を' double'変数に代入すると、これはあなたの行ったことです。 「明示的キャスト」は、実際にキャスト演算子をコードに配置するときです。これはTed Hoppの答え​​です。 –

答えて

2

いいえ、これは明示的な型キャストではありません。あなたはこのようなものを使用するとよいでしょう。なぜなら/オペレータのための拡大規則の実際

result = ((double) num1)/((double) num2); 

を、あなただけのこれらの明示的なキャストのいずれかが必要だろうが、害は両方を有することでありません。分子と分母の暗黙のキャストの明示的なキャストを組み合わせた

result = (double) num1/num2; 

:キャスト演算子()は、除算演算子/よりも優先順位が高いため、実際には、あなたはとしてそれを書くことができます。

+0

(double)明示的にしますか?それはintからdoubleへの変換(またはその型の再定義)のためですか? –

+0

@ JamesParker - _explicit型のcast_の標準Java定義はありませんが、間違いなく[キャスト式](http://docs.oracle.com/javase/specs/jls/se8/html/jls)が必要であることを意味します。 -15.html#jls-15.16)、これにはキャスト演算子 '()'の使用が含まれます。 –

+0

これはもっと理にかなっています。ありがとうございました。ホップ –

0

明示的な型キャストは、式の結果をタイプにコンパイラに伝えるときです。通常は、式の結果がすでに分かっているので、型キャストする必要はありません。例えば

int a = 1, b = 2; 
int c = a + b; // The "type" of a + b is int. No explicit cast. 

しかし、我々は明示的に異なるタイプに表現することをキャストすることができます。

int a = Integer.MAX_VALUE, b = 2; 
double c = (double) a + (double) b; // Explicitly cast to avoid integer overflow. 

が第二のバージョンはダブルスにabを変換し、それらを追加するようにコンパイラーに指示します一緒に。この式の結果もdouble型になります。

@Ted Hoppのように、このような両方のオペランドを明示的にキャストする必要はありません。 aまたはbのいずれかをキャスティングすると、この場合も同じ効果があります。

+0

ありがとう –

関連する問題