初めに
前回はJavaの基本的な配列を学習しましたが、 今回は応用編です。 決まった文字で区切って配列に格納する split と、 複数行を読み込むhasNextLineメソッドを学習しました。split カンマで分割して配列に格納する
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String data = sc.nextLine();
String[] array = data.split(",");
System.out.println(array[0]);
}
}
標準入力で、「ごはん,おかか,梅干し」と打つと、「ごはん」が出力されます。
以下を追記すると、配列の中身を一つずつ出力できます。
配列の中身を取り出す
for (String lunch : array){
System.out.println(lunch + "を食べた");
}
複数行データ→配列に格納
まずは複数行のデータを読み込む
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//行データがある間繰り返すという記述
while (sc.hasNextLine()) {
String data = sc.nextLine();
System.out.println(data);
}
}
}
このように書けば、行を増やしても増やしても表示されます。
hasNextLine()
メソッドは、
入力されてる行がまだあるかどうかを確認するメソッドです。
配列に格納し、拡張for文で出力
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//データの数がわからないのでArrayListを用意する
ArrayList<String> array = new ArrayList<String>();
while (sc.hasNextLine()) {
//データが存在する間、dataに格納する
String data = sc.nextLine();
//dataをarrayにaddする = 配列に格納する
array.add(data);
}
//ここからは拡張for文の出番。
for(String str : array) {
System.out.println(str);
}
}
}
難:カンマ区切りの複数行データを配列に格納し出力
カンマ区切りのデータが複数行あり、
「りんごを5個買った」「レモンを3個買った」というように出力したい。
標準入力の内容
りんご,5
レモン,3
メロン,5
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//行がある限り処理を繰り返す
while (sc.hasNextLine()) {
String line = sc.nextLine();
String[] fruit = line.split(",");
System.out.println(fruit[0] + "を" + fruit[1] + "個買った");
}
}
}
難 配列の中身をランダムで出力
以下はじゃんけんプログラムです。
グー,チョキ,パー という標準入力からランダムに出力します。
import java.util.*;
public class Main {
public static void main(String[] args) {
// 標準入力から1行取得 グー,チョキ,パー
Scanner sc = new Scanner(System.in);
String data = sc.nextLine();
String[] array = data.split(",");
// rand変数に、配列の長さの数字をランダムに入れる
double rand = Math.random()*array.length;
//num変数にint型にしたrandを入れる
int num = (int)rand;
// ランダムに選んだ配列の要素を出力
System.out.println(array[num]);
}
}