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

Javaの変数:解答例

課題

  1. 正しい識別子: NewYork h max2 scaled_data scaledData
    正しくない識別子: 4NewYork(数字で始まっている) min-max(-を使っている) #number(#を使っている) void(キーワードを使っている) data@big(@を使っている)

  2. b = 129; の行において、byte型の変数bに129を代入しようとしている。byte型は-128から127までの値しか取れないのでエラーとなる。
    b = i; の行において、int型の変数iの値をbyte型の変数bに代入しようとしている。byte型はint型よりも表現できる数の範囲が狭いためエラーとなる。

  3. b = 129; の行をどう変えるかで2通りある。
    b = i; の行はキャストを使って無理矢理byte型に変換する。
    なお、System.out.println("b + s" + b + s); の b + s は数値の足し算を意図していると考えると、これでは文字列の連結がなされるので、System.out.println("b + s = " + (b + s)); とすべきである。

    (1) b = 129; の129の値をbyte型で表現できる値(127)に変える場合
    public class TestIntVar1 {
        public static void main(String argv[]) {
            byte b;
            short s = 23;
            int i;
            long n = 15L;
    
            b = 127;
            i = -53;
            System.out.print("byte b = " + b);
            System.out.print(" short s = " + s + "\n");
            i = 4;
            System.out.print("int i = " + i);
            System.out.println(" long n = " + n);
            b = (byte)i;
            n = i = b;
            System.out.println("int i = " + i);
            System.out.println("long n = " + n);
            System.out.println("b + s =" + (b + s));
            i = b + s;
            System.out.println("i = " + i);
            i = i + 1;
            System.out.println("i = " + i);
        }
    }
    (2) b = 129; の129の値をキャストを使ってbyte型に変換してから代入する場合
    public class TestIntVar1 {
        public static void main(String argv[]) {
            byte b;
            short s = 23;
            int i;
            long n = 15L;
    
            b = (byte)129;
            i = -53;
            System.out.print("byte b = " + b);
            System.out.print(" short s = " + s + "\n");
            i = 4;
            System.out.print("int i = " + i);
            System.out.println(" long n = " + n);
            b = (byte)i;
            n = i = b;
            System.out.println("int i = " + i);
            System.out.println("long n = " + n);
            System.out.println("b + s =" + (b + s));
            i = b + s;
            System.out.println("i = " + i);
            i = i + 1;
            System.out.println("i = " + i);
        }
    }

    また、b = i; の行を i = b; すべきと解釈するという選択子もある。ただし、b,i,n の値が上記のプログラムとは異なってしまう。また、次の行 n = i = b; で i = b と同じ代入を行っているので、i = b; の行は無駄になる。したがって、その行は削除しても良いと解釈できる。

  4. 以下、x^yはxのy乗を示す。
    byte型は符号付き8ビット整数であるので-2^7(=-128)から2^7-1(127)。
    short型は符合付き16ビット整数であるので-2^15(=-32768)から2^17-1(32767)。
    int型は符合付き32ビット整数であるので-2^31(=-2147483648)から2^31-1(=2147483647)。
    long型は符合付き64ビット整数であるので-2^63(=-9223372036854775808)から2~63-1(=9223372036854775807)。

  5. c1は文字型であるのでprintlnでそのまま表示しようとすると、その値である文字('a')が表示されてしまう。ここではUnicodeにおける文字コードの値(0x0061)を表示したいため、一度(int)でint型に変換している。ただし文字コードの値は10進数で表示されていることに注意せよ。

  6. ---- Foo.java ----

    public class Foo {
        public static void main(String[] args) {
            int x=10, y=20, z=30;
            int t;
            t = x;
            x = y;
            y = z;
            z = t;
            System.out.println("x="+x+", y="+y+", z="+z);
        }
    }
    

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