教育サーバーのページ
オンラインテキスト目次
ソフトウエア入門演習
正しい識別子: NewYork h max2 scaled_data scaledData
正しくない識別子: 4NewYork(数字で始まっている) min-max(-を使っている) #number(#を使っている) void(キーワードを使っている) data@big(@を使っている)
b = 129; の行において、byte型の変数bに129を代入しようとしている。byte型は-128から127までの値しか取れないのでエラーとなる。
b = i; の行において、int型の変数iの値をbyte型の変数bに代入しようとしている。byte型はint型よりも表現できる数の範囲が狭いためエラーとなる。
b = 129; の行をどう変えるかで2通りある。
b = i; の行はキャストを使って無理矢理byte型に変換する。
なお、System.out.println("b + s" + b + s); の b + s は数値の足し算を意図していると考えると、これでは文字列の連結がなされるので、System.out.println("b + s = " + (b + s)); とすべきである。
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; の行は無駄になる。したがって、その行は削除しても良いと解釈できる。
以下、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)。
c1は文字型であるのでprintlnでそのまま表示しようとすると、その値である文字('a')が表示されてしまう。ここではUnicodeにおける文字コードの値(0x0061)を表示したいため、一度(int)でint型に変換している。ただし文字コードの値は10進数で表示されていることに注意せよ。
---- 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);
}
}