教育サーバーのページ
オンラインテキスト目次
ソフトウエア入門演習

Javaの演算子:解答例

課題

  1. public class Arithmetic {
        public static void main(String[] args) {
            int a = 11, b = 3;
            System.out.println("a = " + a + ",b = " + b);
            System.out.println("a + b = " + (a + b));
            System.out.println("a - b = " + (a - b));
            System.out.println("a * b = " + (a * b));
            System.out.println("a / b = " + (a / b));
            System.out.println("b / a = " + (b / a));
            System.out.println("a % b = " + (a % b));
            System.out.println("b % a = " + (b % a));
        }
    }
    a + b は 11+3なので14となる。a - b は 11-3 なので 8となる。
    a * b は 11×3なので33となる。 a / b は11/3で小数点以下が切り捨てられるので3となる。
    b / a は 3/11で小数点以下が切り捨てられるので0となる。
    a % b は 11 を 3で割った余りなので 2となる。
    b % a は 3 を 11で割った余りなので 3となる。
  2. public class Arithmetic2 {
        public static void main(String[] args) {
            int a = 11, b = 3;
            float c = 11, d = 3;
            System.out.println("a = " + a + ",b = " + b + ",c = " + c + ",d = " + d);
            System.out.println("c / b = " + (c / b));
            System.out.println("d / a = " + (d / a));
            System.out.println("a - (-b) = " + (a - (-b)));
            System.out.println("a + b * c = " + (a + b * c));
            System.out.println("(a + b) * c = " + ((a + b) * c));
            System.out.println("Math.pow(a, b) = " + Math.pow(a, b));
            System.out.println("Math.pow(b, a) = " + Math.pow(b, a));
        }
    }
    c / b は 11.0/3で浮動小数点数の割り算となるので3.6666667となる。
    d / a は 3.0/11で浮動小数点数の割り算となるので0.27272728となる。
    a - (-b) は 11 - (-3) つまり 11+3 であるので14となる。
    a + b * c は+より*のほうが優先順位が高いので b * cが先に計算され、それにaが足される。 したがって 44.0 となる。
    (a + b) * c は先にa + bが計算され、それにcがかけられる。したがって、154.0になる。
    Math.pow(a, b) は 11の3乗を計算するので1331.0 となる。
    Math.pow(b, a) は 3の11乗を計算するので177147.0 となる。
    Math.pow(x, y)というメソッドは、xのy乗を計算するメソッドである。 これは、 Java2Platform API 仕様(http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html) でMathクラスを見ると、powメソッドについて記載されている。 そこには static double pow(double a, double b) という形式で、 1つめの引数を2つめの引数で累乗した値を返します、と書かれてある。
  3. public class Relational {
        public static void main(String[] args) {
            int a = 11, b = 3;
            System.out.println("a = " + a + ",b = " + b);
            System.out.println("a > b = " + (a > b));
            System.out.println("a < b = " + (a < b));
            System.out.println("a >= b = " + (a >= b));
            System.out.println("a <= b = " + (a <= b));
            System.out.println("a == b = " + (a == b));
            System.out.println("a != b = " + (a != b));
        }
    }
    a > b は 11 > 3で、これは成り立つのでtrueと表示される。
    a < b は 11 < 3で、これは成り立たないので false と表示される。
    a >= b は 11 >= 3で、これは成り立つのでtrueと表示される。
    a <= b は 11 <= 3で、これは成り立たないので false と表示される。
    a == b は 11 と 3が等しいかどうか、これは成り立たないので false と表示される。
    a != b は 11 と 3が等しくないかどうか、これは成り立つので true と表示される。
  4. public class Relational2 {
        public static void main(String[] args) {
            System.out.println("10 > 0 && 20 == 20 = " + (10 > 0 && 20 == 20));
            System.out.println("10 < 0 && 20 == 20 = " + (10 < 0 && 20 == 20));
            System.out.println("10 > 0 && 20 == 21 = " + (10 > 0 && 20 == 21));
            System.out.println("10 < 0 || 20 == 20 = " + (10 < 0 || 20 == 20));
            System.out.println("10 < 0 || 20 == 21 = " + (10 < 0 || 20 == 21));
            System.out.println("!(10 < 0) = " + (!(10 < 0)));
            System.out.println("!(20 == 20) = " + (!(20 == 20)));
        }
    }
    10 > 0 && 20 == 20の場合、10 > 0は true、20 == 20 もtrueで true && true であるから、結果はtrueとなる。
    10 < 0 && 20 == 20 の場合、10 < 0 はfalse、20 == 20はtrueなので、false && true となり、結果はfalseとなる。
    10 > 0 && 20 == 21の場合、10 > 0 はtrue、20 == 21はfalseなので、true && false となり、結果はfalseとなる。
    10 < 0 || 20 == 20 の場合、10 < 0 はfalse、20 == 20はtrueなので、false || trueとなり、結果はtrueとなる。
    10 < 0 || 20 == 21 の場合、10 < 0 はfalse、20 == 21もfalseなので、false || falseとなり、結果はfalseとなる。
    !(10 < 0) の場合、10 < 0 はfalseなので、!false となり、結果はtrueとなる。
    !(20 == 20) の場合、20 == 20 はtrueなので、!true となり、結果はfalseとなる。
  5. public class Exam_2_1_1 {
        public static void main(String[] args) {
            System.out.println("10-9-8-7=" + (10-9-8-7));
            System.out.println("((10-9)-8)-7=" + (((10-9)-8)-7));
            System.out.println("10-(9-(8-7))=" + (10-(9-(8-7))));
            System.out.println("20/5*2=" + (20/5*2));
            System.out.println("(20/5)*2=" + ((20/5)*2));
            System.out.println("20/(5*2)=" + (20/(5*2)));
            System.out.println("10+20%3=" + (10+20%3));
            System.out.println("(10+20)%3=" + ((10+20)%3));
            System.out.println("10+(20%3)=" + (10+(20%3)));
            System.out.println("!true&&false=" + (!true&&false));
            System.out.println("(!true)&&false=" + ((!true)&&false));
            System.out.println("!(true&&false)=" + (!(true&&false)));
        }
    }
    10-9-8-7 は 10-9が計算され、1となり、1-8が計算され、-7となり、-7-7が計算され、-14となる。
    ((10-9)-8)-7は、上記と同様で -14となる。
    10-(9-(8-7))は、まず8-7が計算され1となり、次に9-1が計算され、8となり、10-8が計算され、2となる。
    20/5*2 は、まず20/5が計算され 4となり、4*2が計算され、8となる。
    (20/5)*2 は、上記と同様で、8となる。
    20/(5*2)は、まず5*2が計算され 10となり、20/10が計算され、2となる。
    10+20%3は、まず、20%3が計算され 2となり、10+2が計算され、12となる。
    (10+20)%3は、まず、10+20が計算され30となり、30%3が計算され、0となる。
    10+(20%3)は、10+20%3の場合と同様で、12となる。
    !true&&false は、まず!trueが計算され、falseとなり、false&&falseが計算され、falseとなる。
    (!true)&&false は、上記と同様で、falseとなる。
    !(true&&false)は、まずtrue&&falseが計算され、falseとなり、!falseが計算され、trueとなる。
  6. public class Increment {
        public static void main(String[] args) {
            int a, b, c;
    
            a = 3;
            b = a++;
            c = ++a;
            System.out.println("a = " + a + ",b = " + b + ",c = " + c);
    
            a = 3;
            b = ++a;
            c = a++;
            System.out.println("a = " + a + ",b = " + b + ",c = " + c);
        }
    }
    上記の場合は、b = a++で b = aがされてから、a++がなされる。この時点では、aが4、bが3となる。 続いて、c = ++aで++aがされてから、c = aがなされる。つまり、aが5、cも5となる。
    下記の場合は、b = ++aで ++a がされてからb = aがなされる。この時点では、aが4、bも4となる。 続いて、c = a++でc = aがされてから、a++がなされる。つまり、aが5、cは4となる。
  7. public class Exam7 {
        public static void main(String[] args) {
            System.out.println("8 / 4 * 2 = " + (8 / 4 * 2));
        }
    }
    まず、8/4をおこなって2となり、2*2をおこなって4となる。 4*2を先に行うには、4*2を括弧で囲めばよい。つまり、 System.out.println("8 / (4 * 2) = " + (8 / (4 * 2))); とすればよい。
  8. public class Exam8 {
        public static void main(String[] args) {
            int a = 100, b = 200, c = 50;
            a += b = c;
            System.out.println("a = " + a + ",b = " + b + ",c = " + c);
        }
    }
    代入演算子は右結合であるため、a += b = cでは、まず b = c が行われてから、 a += b が行われる。したがって、cは50、bも50、aは150となる。

ソフトウエア入門演習
教育サーバーのページ
ohmi@rsch.tuis.ac.jp