Java方法可以理解为C#中的函数,都是把复杂的问题简单化,按模块,按功能区分,分别完成各个部分在调用这些方法完成整个功能。
方法的综合练习,猜数字的实现:
代码要求:
生成不重复的4位数字(只有1--9)
然后用户竞猜,总共最多只能猜7次
每次都是输入4位数字,按照标准,
分为数字存在(记录为B);
数字存在且位置正确(记录为A)
例如: 生成数字1234
竞猜数字: 1367(提示竞猜结论: 1A1B)
如果1次就中了,提示: 我的神啊!
如果2次就中了,提示: 您是天才啊!
如果3次就中了,提示: 您也是个人才!
如果4次就中了,提示: 不错不错啊
如果5次就中了,提示: 哟,厉害了哟!
如果6次就中了,提示: 呵呵,很好
如果7次就中了,提示: 终于对了,好难啊!
思路:猜数字分为: 1.随机提取不同的四位数;
2.输入猜测的四位数;
3.判断猜测是否正确
4.根据猜测次数做出输出语句
1 package Hw0414;
2
3 import java.util.Scanner;
4
5 public class Hw01 {
6
7 public static void main(String[] args) {
8 System.out.println(" 游戏 猜数字");
9 System.out.println(
10 "游戏规则:
1.生成不重复的4位数字(只有1--9)然后用户竞猜;
2.总共最多只能猜7次每次都是输入4位数字;
3.按照标准,分为数字存在(记录为B);数字存在且位置正确(记录为A);");
11 System.out.println(" 1.开始游戏
2.退出游戏");
12 Scanner sc = new Scanner(System.in);
13 int a = sc.nextInt();
14 int[] nums = new int[4];
15 int[] num = new int[4];
16 try {
17 Thread.sleep(1000);
18 } catch (InterruptedException e) {
19 e.printStackTrace();
20 }
21 if (a == 2)// 判断是退出游戏
22 {
23 System.out.println("game over");
24 System.exit(a);
25
26 }
27 nums = shuzi(a);// 调用方法shuzi将产生的四位随机数存入nums
28 for (int i = 0; i < nums.length; i++)
29 System.out.print(nums[i]);
30 shuchu(panduan(nums, a));// 调用输出语句,在输出语句的实参为判断方法返回的判断次数
31 }
32
33 /**
34 * 输出长度为四但是彼此不想的的数组
35 *
36 * @param a开始游戏信号
37 * @return 需要猜的数字
38 */
39 public static int[] shuzi(int a) {
40 int[] nums = new int[4];
41 int count = 0;
42 while (count < 4) {
43 if (count == 0) {
44 nums[count] = (int) (Math.random() * 9 + 1);
45 } else {
46 int temp = (int) (Math.random() * 9 + 1);// 随机产生的数字不能相同
47 nums[count] = temp;
48 for (int i = 0; i < count; i++) {
49 if (nums[count] == nums[i]) {
50 count--;
51 break;
52 }
53 }
54 }
55 count++;
56 }
57 return nums;
58 }
59
60 /**
61 * 输入您需要猜测的数字
62 *
63 * @param 确认输入信号
64 * @return猜测数字存入数组返回
65 */
66 public static int[] caice(int a) {
67 while (true) {
68 System.out.println("
请输入您要猜测的数字(四位数)");
69 int[] num = new int[4];
70 Scanner sc = new Scanner(System.in);
71 int input = sc.nextInt();
72 int count = 0;
73 if (input >= 1000 && input <= 9999) {
74 num[0] = input / 1000 % 10;
75 num[1] = input / 100 % 10;
76 num[2] = input / 10 % 10;
77 num[3] = input % 10;
78 for (int i = 0; i < num.length - 1; i++) {
79 for (int j = i; j < num.length; j++) {
80 if (num[i] != num[j]) {
81 count++;
82 }
83 }
84 }
85 if (count == 6) {
86 return num;
87 } else {
88 System.out.println("输入错误,数字不能相等");
89 }
90 } else {
91 System.out.println("您的输入错误请重新输入");
92 }
93 }
94 }
95
96 /**
97 * 判断输入并且输出相应的提示
98 *
99 * @param 随机数组
100 * @param 游戏开始信号
101 * @return猜了多少次猜对了
102 */
103 public static int panduan(int[] nums, int a) {
104 int[] num = new int[4];
105 int count = 0;// 猜测次数计数器
106 while (true) {
107 num = caice(a);// 判断语句内部调用猜测方法
108 System.out.println();
109 int b = 0;// 数字正确且在位置计数器
110 int c = 0;// 数字存在且不在位置计数器
111
112 for (int i = 0; i < num.length; i++) {
113 for (int j = 0; j < nums.length; j++)
114 if (num[i] == nums[j])// 判断输入数字和答案数字有无相同,位置数字相同b++,数字存在位置不对
115 {
116 if (i == j) {
117 b++;
118 } else {
119 c++;
120 }
121 }
122 }
123 count++;// 猜测次数计数器
124 System.out.println("您还剩" + (7 - count) + "次");
125 if (b == 4)// 猜测都对
126 {
127 return count;
128 } else
129 try {
130 Thread.sleep(500);
131 } catch (InterruptedException e) {
132 e.printStackTrace();
133 }
134 System.out.print(" 输入的数字为:");
135 for (int i = 0; i < num.length; i++) {
136 System.out.print(num[i]);
137 }
138 System.out.println(" 提示:" + b + "A" + c + "B
加油,再接再厉");
139 if (count == 7) {
140 System.out.println("抱歉您的机会以及用完 ");
141 return 0;
142 }
143 }
144 }
145
146 /**
147 * 输出语句
148 *
149 * @param a输入猜测的次数
150 */
151 public static void shuchu(int a) {
152 try {
153 Thread.sleep(500);
154 } catch (InterruptedException e) {
155 e.printStackTrace();
156 }
157 switch (a) {
158 case 1:
159 System.out.println("我的神啊!");
160 break;
161 case 2:
162 System.out.println("您是天才啊!");
163 break;
164 case 3:
165 System.out.println("您也是个人才!");
166 break;
167 case 4:
168 System.out.println("不错不错啊");
169 break;
170 case 5:
171 System.out.println(" 哟,厉害了哟!");
172 break;
173 case 6:
174 System.out.println("呵呵,很好");
175 break;
176 case 7:
177 System.out.println("终于对了,好难啊!");
178 default:
179 System.out.println("GAME OVER");
180 }
181 }
182 }
总结:
方法能够很好的将复杂问题简单化,分而治之,首先对问题的分解,当能够很好地将问题分解为多部分,只需要将每部分完成,后调用每个部分完成整个问题及可,在方法调用时注意参数列表和返回值这个两个部分,正确的配置参数列表合理的利用方法。