본문 바로가기

IT自主学習 (2023.05.23~)/Java(2023.05.23~)

プログラミング自主学習 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などを活用する。

 

https://www.youtube.com/watch?v=-GsrYvZoAdA