6. 1 型 6. 2 小数の計算 6. 3 練習問題 6. 4 整数と浮動小数点数の混合計算 6. 5 練習問題 6. 6 浮動小数点数の計算における注意点 6. 7 練習問題 6. 8 数学関数 6. 9 練習問題 6.10 真偽値型 6.11 文字型と文字列型 6.12 練習問題 6.13 宿題
変数は、それぞれ記憶できるデータの種類が決まっています。前に int と書いてある変数は整数しか記憶できず、String と 書いてある変数は文字列しか記憶できません。このようなデータの種類のこと を型(type)と呼びます。
一見同じように見えるデータでも、型が違うと全く違う取り扱いを受けます。 例えば、
1 + 2は整数の加算なので、結果は 3 になりますが、
"1" + "2"は文字列の結合なので、結果は "12" になります。
変数を使うときは、必ずそれが記憶できる型を指定しなければなりません。こ れを変数宣言(variable declaration)と呼びます。普通は、クラス 宣言やメソッド宣言の先頭、または変数を初めて使うところで宣言します。 (変数宣言の位置については第9週で詳しく説明します。)
型 変数名 = 最初の値;必要がなければ "= 最初の値" は省略できます。また、同じ型の変 数はコンマで区切って並べることができます。
メソッドの仮引数と返り値にも型を指定します。値を返さないメソッドには特 別な型 void を指定します。
型 メソッド名 ( 型 仮引数, … ) { メソッド本体 }
1 2 3 4 5 6 7 8 |
class ForeignExchange extends SfcDoNothing { double dollar, yen; void sfcProcess () { yen = Double.parseDouble(sfcInput()); dollar = yen / 106; sfcOutput(Double.toString(dollar)); } } |
コンピュータで扱う、小数点のついた数のことを正確には浮動小数点数 (floating-point number)と呼びます。
123456789000000000 0.0000000123456789
0.123456789 * 10の18乗 0.123456789 * 10の-7乗
整数と浮動小数点数を表現する型には、int と double だ けでなく、記憶容量と表現できる範囲や精度の異なる次のような型があります。 整数
浮動小数点数
|
double Math.floor(double x)です。
一つの式の中に整数と浮動小数点数がある場合の計算規則は次のようになりま す。
整数や浮動小数点数の値を別の型の値として使いたいときは、キャスト (cast)します。キャストは次のように書きます。
( 型 ) 式例えば、int 型の変数 x に対して、(double)x と書くと、x の値を浮動小数点数に変換したものになります。浮動 小数点数を整数型変数にキャストする時は,小数部分が切り捨てられた整数に 変換されます。
long Math.round(double x)です。返り値の long 型は整数型の一種です。必要ならば int か double にキャストします。
1234567 + 12.34567 --------------- 1234579.34567 ↓ 1234579
0.1234567 - 0.1234566 ---------------- 0.0000001xxxxxx
class Precision extends SfcDoNothing { void sfcProcess () { double x = 0.0; for (int i = 1000000; i >= 1; i = i - 1) { x = x + 1.0 / i; } sfcOutput(Double.toString(x)); } } |
三角関数、平方根などを計算するメソッドが用意されています。
double Math.abs(double x) | 絶対値 |
double Math.max(double x, double y) | 2つの値の大きい方 |
double Math.min(double x, double y) | 2つの値の小さい方 |
double Math.ceil(double x) | 小数部分切り上げ |
long Math.round(double x) | 小数部分四捨五入 |
double Math.floor(double x) | 小数部分切り捨て |
double Math.sqrt(double x) | 平方根 |
double Math.exp(double x) | eの累乗 |
double Math.log(double x) | 自然対数 |
double Math.pow(double x, double y) | x を y で累乗した値 |
double Math.sin(double x) | 正弦 (サイン) |
double Math.cos(double x) | 余弦 (コサイン) |
double Math.tan(double x) | 正接 (タンジェント) |
double Math.toDegrees(double x) | ラジアンから度に換算 |
double Math.toRadians(double x) | 度からラジアンに換算 |
次のプログラムはサインのグラフを描くものです。
1 2 3 4 5 6 7 8 9 |
import java.awt.*; class SinCurve extends SfcDoNothing { void sfcDraw(Graphics g) { for (int t = -180; t <= 180; t = t + 10) { int x = (t + 180) * 300 / 360; g.drawLine(x, 150, x, 150-(int)(Math.sin(Math.toRadians(t))*150)); } } } |
次のような図形を描くプログラムを書きなさい。
boolean 型は、条件が成り立つかどうかを表す型です。この型の値
は true と false の二つしかありません。
char は整数型の一種ですが、文字を表すのに使われます。文字列を
表す String 型とは全く別の型です。
X座標とY座標を周期の違う三角関数で指定すると、リサージュ図形と呼ばれる
図形が描けます。次のようなリサージュ図形を描くプログラムを書きなさい。
(正確に同じ図形でなくてもかまいません)
6.10 真偽値型
6.11 文字型と文字列型
char s.charAt(int index)
は、index 番目の文字を返します。また、s の中に何文字
含まれているかは、
int s.length()
で分かります。
6.12 練習問題
入力された文字列に大文字が何文字含まれているか数えるプログラムを書きな
さい。ただし、ある文字が大文字かどうかを知るメソッドは
boolean Character.isUpperCase(char c)
です。
6.13 宿題
慶應義塾大学の授業以外での無断利用、複製はご遠慮下さい。
Copyright (c) 1999 慶應義塾大学