🙆
プログラミング自主学習 28日目 コンソルで変数の値出力/演算子
コンソルで変数の値出力
printf
printf("%[argument_index$], [flags] [width], [.precision] conversion", 変数あるいは値)
flags:
-
: 左に整列、右は空白
0
:空白を0に埋める
+
:+、-符号出力
,
: 整数の3桁で,を付ける。
conversion:
%d
: 10進法整数
%o
: 8進法整数
%x
: 16進法整数
%f
: 実数
%e
: 指数
%b
: boolean
%c
: 文字
%s
: String
%n
: どのOSでも改行(windowは実は\r\nだけど\nに見えるようだ)
package ch02.sec12;
public class PrintfExample2 {
public static void main(String[] args) {
int number = 10;
double score = 12.345;
String text = String.valueOf(number);
System.out.printf("%b %n", 3<1); //boolean
System.out.printf("%d %n", number); //decimal
System.out.printf("%o %n", number); //octal
System.out.printf("%x %n%n", number); //hexadecimal
System.out.printf("%,d %n", 10000000); //decimal
System.out.printf("%+d %n", number); //decimal
System.out.printf("%+d %n", -number); //decimal
System.out.printf("%f %n", score); // 浮動小数点(floating point)
System.out.printf("%e %n%n", score); // 指数(exponent)
System.out.printf("%c %n",65); //char(UNICODE)
System.out.printf("%s %n%n", text); //String
System.out.printf("[%10d] %n", number);
System.out.printf("[%-10d] %n", number);
System.out.printf("[%010d] %n", number);
System.out.printf("[%10.5f] %n", score);
System.out.printf("[%010.5f] %n", score);
}
}
[result]
false
10
12
a
10,000,000
+10
-10
12.345000
1.234500e+01
A
10
[ 10]
[10 ]
[0000000010]
[ 12.34500]
[0012.34500]
Scanner
コンソールに文字列リテラルを入力して、それを持つことができる。
Scanner scanner = new Scanner(System.in);
String inputData = scanner.nextline();
close(); //必ず
符号演算子
+
: 被演算子の符号を維持。
-
: 被演算子の符号を変更。
変数の演算は基本的にintに変換されてから実行されるため、
byte b =100; byte result = -b; <ーエラー
byte b =100; int result = =b; <ー OK
増減演算子
++(--)被演算子
: 被演算子の値を1増加(減少)させる。
被演算子++(--)
: 他の演算を実施した後被演算子の値を1増加(減少)させる。
int x = 1; int y = 1;
int result 1 = ++x + 10; -> int result1 = 2 + 10; 12
int result 2 = y++ + 10; -> int result2 = int result2 = 1+10; -> yを1増加 11
最終的にxとyは2になる。
算術演算子
1)OVERFLOWとUNDERFLOWを気を付ける。
int a = 1000000;
int b = 1000000;
int result = a*b // -> 演算の値がOVERFLOWのため-72739968;発生。
long a =1000000;
long b=1000000;
long result = a*b // -> 1000000000000
MAX_VALUE:最大値、MIN_VALUE:最小値
2)正確な演算は整数を使う。
コンピューターは実数を保存する際に、2進法で変換して、保存する。
0.125の場合は2進法で分けて表現できるが、
0.1の場合は0.00011001 100110001 100110001 100110001 100110001 100110001 100110001 のように仮数のところが無限に繰り返される。
これは24bitの仮数(mantisa)を保存するfloatにも52bitのmantisaを保存するdoubleにも完璧にこめることができないため、精密度の損失が発生する。
なので、0.1+0.2==0.3はfalseになる。
お金のように誤差があればいけないものは整数もしくはBigDecimalなどを活用する。
Discussion