ji-4. Javaプログラミングにお
ける基本データ型と数値計算
の基礎
1
Java プログラミング入門)
URL: https://www.kkaneko.jp/pro/ji/index.html
金子邦彦
内容
例題1.硬貨の金種計算
例題2.うるう年の判定
整数の変数
浮動小数点数と整数の違い
例題3.複利計算
整数の変数と,浮動小数点数の変数を混在さ
せるときに気を付けねばならないこと
2
目標
プログラムでの整数浮動小数点数の違いについ
て理解する
目的に応じて,整数の変数浮動小数点数の変数
正しく使い分けることができるようになる
3
基本データ
基本データ配列
クラスに属するオブジェクト: String クラスなど多種
Java のデータの種類
4
データの種類
基本データ型
サイズ
整数
byte
8 bit
short
16 bit
int
32 bit
long
64 bit
浮動小数点数
float
32 bit
double
64 bit
文字
char
16 bit
true/false
boolean
この資料では,整数 int と浮動小数点数 double を使う
整数と浮動小数点数
整数
整数(正か負か0)
例)
28
4778
-1
-10
-1250
浮動小数点数
小数付きの数も
例)
1278748623
456375939
2.190872
0.000178
5
整数と浮動小数点数
6
整数 浮動小数点数
四則演算
+, -, *, /
/ では,余りは切
り捨て)
+, -, *, /
剰余
%
小数点以下切
り捨て
floor
オンライン開発環境 Online GDB
プログラミングを行えるオンラインのサービス
https://www.onlinegdb.com
ウェブブラウザを使う
たくさんの言語を扱うことができる
Python3, Java, C/C++, C#, JavaScript,
R, アセンブリ言語,SQL など
オンラインなので、「秘密にしたいプログラム」
を扱うには十分な注意が必要
7
Online GDB Java を動かす手順
ウェブブラウザを起動する
次の URL を開く
https://www.onlinegdb.com
8
Language」のところで,「Javaを選ぶ
9
エディタ画面
実行ボタン
プログラムを
書き換えること
ができる
10
例題1.硬貨の金種計算
金額を読み込んで,適切な小銭の枚数を求め,表
示するプログラムを作る.
例) 金額が768円のとき,
500円玉: 1枚
100円玉: 2枚
50円玉: 1枚
10円玉: 1枚
5円玉: 1枚
1円玉: 3枚
例題では,簡単のため,紙幣は考えない硬貨の
)ということにする
各硬貨の枚数を扱うために,整数変数を使う
11
1円札の枚数
金額 5 で割った余り
5円玉の枚数
金額 10 で割った余り(小数点以下切り捨て)について,
それを 5 で割った商
10円玉の枚数
金額 50 で割った余り(小数点以下切り捨て)について,
それを 10 で割った商
他の効果も同様に考える
12
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int kingaku, n500, n100, n50, n10, n5, n1;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter kingaku =");
kingaku = s.nextInt();
n500 = kingaku / 500;
n100 = ( kingaku % 500 ) / 100;
n50 = ( kingaku % 100 ) / 50;
n10 = ( kingaku % 50 ) / 10;
n5 = ( kingaku % 10 ) / 5;
n1 = kingaku % 5;
System.out.printf("500 en %d mai¥n", n500);
System.out.printf("100 en %d mai¥n", n100);
System.out.printf("50 en %d mai¥n", n50);
System.out.printf("10 en %d mai¥n", n10);
System.out.printf("5 en %d mai¥n", n5);
System.out.printf("1 en %d mai¥n", n1);
}
}
13
計算
キーボードからの
データの読み込み
画面表示
硬貨の金種計算
14
実行結果の例
プログラム実行順
15
System.out.println("Please Enter kingaku =");
kingaku = s.nextInt();
n500 = kingaku / 500;
n100 = ( kingaku % 500 ) / 100;
n50 = ( kingaku % 100 ) / 50;
n10 = ( kingaku % 50 ) / 10;
n5 = ( kingaku % 10 ) / 5;
n1 = kingaku % 5;;
System.out.printf("500 en %d mai¥n", n500);
System.out.printf("100 en %d mai¥n", n100);
System.out.printf("50 en %d mai¥n", n50);
System.out.printf("10 en %d mai¥n", n10);
System.out.printf("5 en %d mai¥n", n5);
System.out.printf("1 en %d mai¥n", n1);
メッセージを表示
整数データを読み込み
金種計算
計算結果を表示
例題2.うるう年の判定
「西暦年」を読み込んでうるう年かどうか表示
するプログラムを作る.
2022 うるう年でない
2024 うるう年である
うるう年の判定のために,比較演算論理演算
組み合わせる
西暦年が 4, 100, 400 の倍数であるかを調べるため
% を使う(余りが 0 ならば,倍数である
16
グレゴリオ暦でのうるう年
うるう年とは: 2月が29日まである年
うるう年は400年に97回で,1年の平均日数は
365.2422
うるう年の判定法
年数が 4 の倍数の年 うるう年
但し, 100の倍数の年で400の倍数でない年
うるう年ではない(4の倍数だが例外とする)
(例) 2024 年: うるう年(4の倍数)
2020 年: うるう年(4の倍数)
2000 年: うるう年(4の倍数)
1900 年: うるう年ではない
100 の倍数だが 400 の倍数でない
1800 年: うるう年ではない
100 の倍数だが 400 の倍数でない
17
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int y;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter year =");
y = s.nextInt();
if (((y % 400) == 0) || (((y % 100) != 0) && ((y % 4) == 0))) {
System.out.printf("%d is leap year¥n", y);
} else {
System.out.printf("%d is not leap year¥n", y);
}
}
}
18
条件式
条件が成り立つ場合
に実行される部分
条件が成り立たない場合
に実行される部分
うるう年の判定
19
実行結果の例
うるう年の判定式
((y % 400) == 0) || (((y % 100) != 0) && ((y % 4) == 0))
20
400の倍数である 100の倍数でない 4の倍数である
かつ
または
例題3.複利計算
元金をある年利で,ある年数だけ運用したときの
元利利息を表示する
複利計算では,利息が利息を生む.
複利計算を行うために,pow メソッド(pow(x,y) は,
x y乗)を使う
浮動小数点数の小数点以下切り捨てのため floor メソ
ッドを使う
整数浮動小数点数のデータが混在する
元金 gankin: 整数データ(単位は 円)
年数 nensu: 整数データ(単位は 年)
年利 nenri: 浮動小数点数データ (単位は %)
21
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int gankin, nensu, ganri;
double nenri, r;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter gankin (en) =");
gankin = s.nextInt();
System.out.println("Please Enter nensu (en) =");
nensu = s.nextInt();
System.out.println("Please Enter nenri (%) =");
nenri = s.nextDouble();
r = 1 + (nenri * 0.01);
ganri = (int)Math.floor(gankin * Math.pow(r, nensu));
System.out.printf("ganri = %d (en)¥n", ganri);
System.out.printf("risoku = %d (en)¥n", ganri - gankin);
}
}
22
計算
キーボードからの
データの読み込み
画面表示
硬貨の金種計算
23
実行結果の例
複利の計算
複利の公式:
べき乗 x
y
の計算のために,pow メソッドを使用
する
24
ganri = trunc( gankin * Power( r, nensu ) );
r は年利
元利 = 元金 × (1+年利)
年数
floor
floor 浮動小数点数の小数点以下を切り捨て
例) 3.4 → 3, 3.6 → 4, -1.6 → 2
25
演習.時間の換算
秒数 x を読み込んで,h 時,m 分,s 秒を計算
るプログラムを作りなさい.
例) x=3723 のとき,
h = 1, m = 2, s = 3
26