石田修二 > コンピュータメモ > Java > (サイト内検索)
Scannerクラスは,簡素な入力機能を提供します。
import java.util.Scanner; class Input{ public static void main(String[] args){ int i; String s; Scanner scan = new Scanner(System.in); System.out.println("名前とスコアを入力して下さい。"); s = scan.next(); i = scan.nextInt(); System.out.println(s + "さんのスコアは " + i + "点です。"); } }
まず最初に,Scannerを使う時は,import java.util.Scanner;
という行を記述しておく必要があります。初心者は「Scannerを使うために必要な宣言」と覚えてもらって構いません。
その後,Scanner scan = new Scanner(System.in)
で実際の Scanner を生成し,scan という変数に代入します。
Scannerはクラスですが,それを使う時は,Scanner を1つ生成し,それをScanner を入れておくための変数に代入することが必要になります。
このように Scanner を1つ生成すると,あとはそれを利用して,キーボードからの入力を取り出すことができます。
s = scan.next();
の部分を見て下さい。ここでは,next()
というメソッドを使って,文字列を取り出し,s という文字列型(String)の変数に代入しています。生成した Scanner のメソッドを利用する時は,生成した Scanner が scan という名前の変数に代入されているので,scan.next() のように変数名とメソッド名をピリオドでつなげて書きます。
同じように,i = scan.nextInt()
では Scanner を使って整数の値を1つ取り出しています。整数の値を取り出すので,nextInt() を使い,整数型の変数である i に代入しています。
最後に,System.out.println(s + "さんのスコアは " + i + "点です。")
の部分で,読み取った値を画面に表示しています。
文字列と整数を,空白(半角でも全角でもOk)で区切って,キーボードから入力します。すると,Scanner がそれを自動で分割し,それぞれ順番に取り出してくれます。
文字列と整数を空白ではなく,改行で区切っても,Scanner が自動で2つを取り出してくれるので,プログラムの中で何も対処しなくても,正しい値が代入されます。
もう1つサンプルプログラムを紹介します。『Javaの絵本』p.117ページからのものです。
import java.util.Scanner; public class ScannerSample { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("駅名を入れて下さい:"); String ekimei = sc.next(); System.out.print("ホーム番号を入力して下さい:"); int bansen = sc.nextInt(); sc.close(); System.out.println(ekimei + "駅の" + bansen + "番ホームで待っています"); } }
コンパイルして,実行すると次のように結果が出力されます。
駅名を入れて下さい:四日市 ホーム番号を入力して下さい:3 四日市駅の3番ホームで待っています
Scannerクラスの主なメソッドを紹介します。
変数の値を様々なフォーマットで出力したい場合,それを指定した形での出力をすることができます。
先ほどのプログラムで説明すると,
System.out.println(s + "さんのスコアは " + i + "点です。")
を,
System.out.printf("%sさんのスコアは%d点です。",s, i)
にします。
printf() というコマンドに対して,文字列型の変数の値を表示する箇所には %s,整数型の変数の値を表示するところには %d といった記号を書いておき,対応する変数を後ろに並べて書く,という形式になります。
キーボードから入力された値を読み取るクラスには Scanner 以外にも BufferedReader というクラスもあります。
では,プログラムを紹介しましょう。
import java.io.*; public class InputTest { public static void main(String[] args) throws IOException { BufferedReader bufRd = new BufferedReader(new InputStreamReader(System.in)); System.out.println("キーボードから何か入力して下さい"); String str = bufRd.readLine(); System.out.println(str + "と入力されました。"); } }
数値演算でよく用いられるライブラリについて説明します。
算数レベルの計算であれば,演算子で十分なのですが,指数や平方根,絶対値といった数学レベルの計算には Math クラスを使います。
絶対値や平方根,sin() や cos() といった数学的な演算は,それを行ってくれる専用のクラスが用意されています。それを Methクラスと呼び,そこに準備されている各種メソッドを使うことで,数学的な演算を行うことができます。
double f; f = Math.abs(Math.sin(2 * Math.PI));
まず,Math.PI
の部分で円周率の定数を利用します。このように,メソッドは何かを演算するだけでなく,定数の値を返すようなものも準備されています。
次に,Math.sin(2 * Math.PI)
の部分で三角関数の演算,sin() の値を計算しています。
さらに,Math.abs(Math.sin(2 * Math.PI))
の部分で絶対値の計算を行っています。
数学ライブラリは様々な演算が準備されているので,参考書等でどのような演算があるか,調べてみましょう。
30度のサイン,コサイン,タンジェントを求めるプログラムは次の通りです。
public class Function { public static void main(String[] args) { // 実数型変数degとradを宣言。degは同時に代入 double deg = 30, rad; rad = Math.toRadians(deg); // 度→ラジアン double s = Math.sin(rad); // サインを求めて,sに代入 double c = Math.cos(rad); // コサインを求めて,cに代入 double t = Math.tan(rad); // タンジェントを求めて,tに代入 System.out.println("角度 " + deg + "度"); System.out.println("sin " + (float)s); System.out.println("cos " + (float)c); System.out.println("tan " + (float)t); } }
プログラムで乱数を生成するには,double ran = Math.random();
のようにします。
double 型から float 型やint型には変換できません。double型ということで覚えてしまいましょう。
public class Rand { public static void main(String[] args) { double ran = Math.random(); System.out.println(ran); } }
0から6の数字をランダムに表示させます。
public class RandSample { public static void main(String[] args) { int a = (int)(Math.random()*7); System.out.println(a); } }
先に Math.random は double型と説明しました。このままでは int 型に出来ないので,Math.randomの前に int と記述しておきます。このようにすると, Math.random()*7 の計算結果が int 型に変換され,それが a に代入されます。
まず,人数と合計金額をキーボードから入力します。int i; int j;
(2)それを Scanner を使って読み取ります。
i = scan.nextInt(); j = scan.nextInt();
(3)一人あたりの支払い金額を表示させます。
t = j / i
基本的な考え方としては,100円単位に四捨五入した値を計算して,1人を除いた人たちの合計支払い金額を計算すると,合計金額からそれを引けば,最後の1人の支払金額がわかります。
import java.util.Scanner; class Split { public static void main(String[] args){ int num, total, round_bill, remain; double bill; Scanner scan = new Scanner(System.in); System.out.println("人数と合計金額を入力してください。"); num = scan.nextInt(); total = scan.nextInt(); bill = (double)total/num; System.out.println("一人あたりの金額は、" + bill + "円です。"); round_bill = (int) Math.round(total/num/100.0) * 100; remain = total - round_bill * (num - 1); System.out.printf("100円単位では、一人あたり %d円、ひとりだけ %d円です。", round_bill, remain); } }
(石田修二の解答)キャストを使ったりとかなり長くなってしまった。
import java.util.Scanner; class Split{ public static void main(String[] args){ double n; double y; Scanner scan = new Scanner(System.in); System.out.println("人数と合計金額を入力して下さい。"); n = scan.nextInt(); y = scan.nextInt(); double i; i = y / n; System.out.println("一人あたりの金額は" + i + "円です。"); double f; f = Math.floor(i /100)*100; int g = (int)f; int y1 = (int)y; int n1 = (int)n; int h; h = y1 - (n1-1) * g; System.out.println("100円単位では,一人あたりは " + g + "円 ひとりだけ" + h + "円です。"); } }
リンクはご自由にどうぞ。
【石田修二トップページ】 【コンピュータメモ】 【Java】
Last modified: 2017-03-02 00:31:15