よく見かける
アカウント作成->ログイン->実行->ログアウト
という流れを擬似的に再現するアプリを作成しながらメソッドの演習をしよう。
この処理を実現するには、メソッドの戻り値、引数に参照型変数を渡したときの挙動、変数の有効範囲などをしっかりと理解している必要がある。
もし、今回のお題が実現できたらメソッド理解はOKだ。
お題
◯アカウント作成
◯ログイン
◯実行
◯ログアウト
といった処理をメソッドとして作成し、メインメソッドから呼び出すことによって処理を実現していく。
その際
「アカウント未作成なのにログインを選択する」
などの異常系の処理は実行例を参考にすること。
(実行例にないものは適切な値が入力されることを前提としてよい)
実行例
ログインアプリケーションを作成します
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
2
アカウントを作成してください
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
3
アカウント作成してください
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
4
ログインしてください
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
5
ログインしていません
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
1
IDを入力して下さい
PASSを入力して下さい
ID・PASSは1文字以上入力してください
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
1
IDを入力して下さい
abc
PASSを入力して下さい
123
登録が完了しました
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
2
あなたのIDはabc,PASSは123
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
3
ログインの処理をします
IDを入力してください
a
PASSを入力してください
1
入力が間違っています
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
3
ログインの処理をします
IDを入力してください
abc
PASSを入力してください
123
ログイン完了
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
4
abcさん、こんにちは
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
5
ログアウトしました
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
4
ログインしてください
----------------------------------------------
どの処理をしますか?
1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了
6
アプリケーションを終了します
仕様
メインメソッドは以下の変数を作成し、足りない部分を作成していく
public static void main(String[] args) {
boolean accountExists=false;//アカウントが存在するか
boolean isLogin=false;//ログインしているか
String[] account=new String[2];//アカウント情報[0]にid、[1]にpass
System.out.println("ログインアプリケーションを作成します");
//ここから下を作成する
}
メソッドとしては以下を作成する。この際、実行例を見ながら引数や戻り値をどのように設定すればよいかを考え実装していく
//アカウントを作成する処理
createAccount()
//ID、PASSを表示する処理
displayAccount()
//ログイン処理
login()
//実行処理
execute()
//ログアウト処理
logout()
Let’s challenge!
メソッドの作成に慣れていれば、実行例を見ながらスムーズに作成していける。
しかし、メソッドが苦手な人にとっては困難を極めるだろう。
メソッド理解の確認ができるお題だ。
作例
import java.util.Scanner;
public class LoginApp {
public static void main(String[] args) {
boolean accountExists=false;//アカウントが存在するか
boolean isLogin=false;//ログインしているか
String[] account=new String[2];//アカウント情報[0]にid、[1]にpass
System.out.println("ログインアプリケーションを作成します");
while(true){
System.out.println("----------------------------------------------");
System.out.println("どの処理をしますか?");
System.out.println("1:新規作成 2:ID・PASS確認 3:ログイン 4:実行 5:ログアウト 6:終了");
int select = new Scanner(System.in).nextInt();
switch(select) {
case 1:
accountExists=createAccount(account);
break;
case 2:
displayAccount(accountExists,account);
break;
case 3:
isLogin=login(accountExists,account);
break;
case 4:
execute(isLogin, account);
break;
case 5:
isLogin=logout(isLogin);
break;
case 6:
System.out.println("アプリケーションを終了します");
return;
}
}
}
public static boolean createAccount(String[] account) {
System.out.println("IDを入力して下さい");
String id = new Scanner(System.in).nextLine();
System.out.println("PASSを入力して下さい");
String pass = new Scanner(System.in).nextLine();
if (id.length() < 1 || pass.length() < 1) {
System.out.println("ID・PASSは1文字以上入力してください");
return false;
}
account[0]=id;
account[1]=pass;
System.out.println("登録が完了しました");
return true;
}
public static void displayAccount(boolean accountExists,String[] account) {
if (!accountExists) {
System.out.println("アカウントを作成してください");
return;
}
System.out.println("あなたのIDは"+account[0]+",PASSは"+account[1]);
}
public static boolean login(boolean accountExists,String[] account) {
if (!accountExists ) {
System.out.println("アカウント作成してください");
return false;
}
System.out.println("ログインの処理をします");
System.out.println("IDを入力してください");
String id = new Scanner(System.in).next();
System.out.println("PASSを入力してください");
String pass = new Scanner(System.in).next();
if(id.equals(account[0]) && pass.equals(account[1])) {
System.out.println("ログイン完了");
return true;
}
System.out.println("入力が間違っています");
return false;
}
public static void execute(boolean isLogin,String[] account) {
if(!isLogin) {
System.out.println("ログインしてください");
return;
}
System.out.println(account[0]+"さん、こんにちは");
}
public static boolean logout(boolean isLogin) {
if(isLogin) {
System.out.println("ログアウトしました");
}else {
System.out.println("ログインしていません");
}
return false;
}
}
ポイント
メインメソッド内にあるローカル変数
boolean accountExists
boolean isLogin
String[] account
をメソッドによってどのように更新していくかを考える。
boolean型の基本型はメソッド内で書き換えることができないので、メソッドの戻り値としてbooleanを返すように設定していく必要がある。
一方、配列などの参照型変数はメソッドに渡すことによって、メソッド内で更新していくことができる(こういうメソッドを副作用のあるメソッドという)
最後に
今回のお題は配列やメソッドの学習を終えたJava初学者がメソッドについてしっかり理解できているかを確認できる内容となっている。
このお題がスムーズに解けたら、メソッドに関してはバッチリだ。
コメント