fork download
  1. import java.util.Random;
  2. import java.util.Scanner;
  3.  
  4. public class Main {
  5. public static void main(String[] args) {
  6. String[] player = {"あなた", "コンピュータ"};
  7. String[] message = {String.format("%sが%s個取った", player[1], "%d"), "石を取って!(1〜%d) > ", "現在の石の数: %d\n", "%sの勝ち\n"};
  8. Random rnd = new Random();
  9. int iVal = rnd.nextInt(2);
  10. int[] env = {15, iVal, iVal, 0, 0};
  11. System.out.println(String.format("%sが先行", player[iVal]));
  12. while (true) {
  13. env = print(eval(read(env, message), env), message);
  14. if (env[0] < 1) {
  15. System.out.printf(String.format(message[3], player[env[1]]));
  16. break;
  17. }
  18. }
  19. }
  20. public static int read(int[] env, String[] prompt) {
  21. Scanner scanner = new Scanner(System.in);
  22. int num = -1;
  23. if (env[1] == 0) {
  24. while (true) {
  25. System.out.printf(prompt[1], env[0] > 3 ? 3 : env[0]);
  26. num = scanner.nextInt();
  27. if (env[0] > 3) {
  28. if ((num > 0) && (num < 4)) {
  29. break;
  30. }
  31. } else {
  32. if ((num > 0) && (num < env[0] + 1)) {
  33. break;
  34. }
  35. }
  36. }
  37. }
  38. return num;
  39. }
  40. public static int[] eval(int x, int[] env) {
  41. if (env[1] == 0) {
  42. env[0] -= x;
  43. env[1] = 1;
  44. env[3] = x;
  45. } else {
  46. if (env[2] == 0) {
  47. if (env[0] % 4 == 1) {
  48. switch (env[3]) {
  49. case 1:
  50. env[4] = 3;
  51. case 2:
  52. env[4] = 2;
  53. default:
  54. env[4] = 1;
  55. }
  56. } else {
  57. Random rnd = new Random();
  58. if (env[0] > 3) {
  59. env[4] = rnd.nextInt(3) + 1;
  60. } else {
  61. env[4] = rnd.nextInt(env[0]) + 1;
  62. }
  63. }
  64. } else {
  65. switch (env[0] % 4) {
  66. case 0:
  67. env[4] = 3;
  68. break;
  69. case 2:
  70. env[4] = 1;
  71. break;
  72. default:
  73. env[4] = 2;
  74. }
  75. }
  76. env[0] -= env[4];
  77. env[1] = 0;
  78. }
  79. return env;
  80. }
  81. public static int[] print(int[] env, String[] message) {
  82. if (env[1] == 0) {
  83. System.out.println(String.format(message[env[1]], env[4]));
  84. }
  85. System.out.println(String.format(message[2], env[0]));
  86. return env;
  87. }
  88. }
  89.  
  90.  
Runtime error #stdin #stdout #stderr 0.13s 51484KB
stdin
Standard input is empty
stdout
コンピュータが先行
コンピュータが2個取った
現在の石の数: 13

石を取って!(1〜3) > 
stderr
Exception in thread "main" java.util.NoSuchElementException
	at java.base/java.util.Scanner.throwFor(Scanner.java:937)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at Main.read(Main.java:26)
	at Main.main(Main.java:13)