2
1
paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

Paiza×Qiitaキャンペーン Javaで解説してみた【C 野球の審判 編】

Last updated at Posted at 2024-08-21

問題へのリンク

解答コード

詳細

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		final int N = scanner.nextInt();

		StringBuilder sb = new StringBuilder();

		Umpire umpire = new Umpire();

		for (int i = 0; i < N; i++) {
			final String S = scanner.next();
			sb.append(umpire.call(S)).append("\n");
		}

		System.out.println(sb);
		scanner.close();
	}

	private static class Umpire {

		private int strike = 0;
		private int ball = 0;

		String call(String judge) {
			if (judge.equals("strike")) {
				return strike();
			} else {
				return ball();
			}
		}

		private String strike() {
			strike++;
			if (strike == 3) {
				reset();
				return "out!";
			} else {
				return "strike!";
			}
		}

		private String ball() {
			ball++;
			if (ball == 4) {
				reset();
				return "fourball!";
			} else {
				return "ball!";
			}
		}

		private void reset() {
			strike = 0;
			ball = 0;
		}
	}
}

解説

詳細

審判を作ってしまうとデータ管理が楽です。

call⇒mainではこれしかしません。審判は投げられたボールに対して発声するだけです。

call内の動作
投げられたものが"strike"か"ball"かで動作が変わります。
"strike"⇒strike用発声をします。
"ball"⇒ball用発声をします。

strike時の動作
strikeカウントを増やして判定します
strike == 3 ⇒バッターアウトです。"out!"と発言してresetします
それ以外 ⇒ "strike!"と発言するだけです。

ball時の動作
ballカウントを増やして判定します
ball == 4 ⇒ファーボールです。"foueball!"と発言してresetします
それ以外 ⇒ "ball!"と発言するだけです。

reset時の動作
バッターが変わります。strike・ball両方0にします。

追記

記事が完成してから複数のバッターを考慮する必要がないことに気づきました。
reset部分全部いりませんね!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1