1 package day6;
2
3 import java.util.Scanner;
4
5 /**
6 * @author haifei
7 *
8 * 基础知识练习案例*10
9 */
10
11 public class demo2 {
12 public static void main(String[] args) {
13 // myTest1();
14 // myTest2();
15 // myTest3();
16 // myTest4();
17 // myTest5();
18 // myTest6();
19 // myTest7();
20 // myTest8();
21 // myTest9();
22 myTest10();
23 }
24
25 public static void myTest1(){
26 Scanner sc = new Scanner(System.in);
27 System.out.println("请输入1-7中的一个整数:");
28 int week = sc.nextInt();
29 if(week<1 || week>7){
30 System.out.println("输入有误");
31 }else if(week == 1){
32 System.out.println("跑步");
33 }else if(week == 2){
34 System.out.println("游泳");
35 }else if(week == 3){
36 System.out.println("爬山");
37 }else if(week == 4){
38 System.out.println("散步");
39 }else if(week == 5){
40 System.out.println("单车");
41 }else if(week == 6){
42 System.out.println("拳击");
43 }else {
44 System.out.println("周末吃亿顿好的");
45 }
46 }
47
48 public static void myTest2(){
49 /*
50 IDEA导包:
51 1:手动导包
52 import java.util.Scanner;
53 2:快捷键导包
54 未导包时,若代码中已写Scanner,则会字体变红,
55 此时鼠标放到红色字处然后Alt+Enter会出现后选包,选中即可
56 3:自动导包
57 Scanner写一半的时候IDEA会提示,此时回车
58 */
59 Scanner sc = new Scanner(System.in);
60 System.out.println("请输入1-7中的一个整数:");
61 int week = sc.nextInt();
62 switch (week){
63 case 1:
64 System.out.println("跑步");
65 break;
66 case 2:
67 System.out.println("游泳");
68 break;
69 case 3:
70 System.out.println("拳击");
71 break;
72 case 4:
73 System.out.println("散步");
74 break;
75 case 5:
76 System.out.println("单车");
77 break;
78 case 6:
79 System.out.println("爬山");
80 break;
81 case 7:
82 System.out.println("周末吃亿顿好的");
83 break;
84 default:
85 System.out.println("输入有误");
86 break;
87 }
88 }
89
90 public static void myTest3(){ //敲7游戏
91 int count = 0;
92 for(int i=1; i<=100; i++){
93 if( (i%10 == 7) || (i/10%10 == 7) || (i%7 == 0)){
94 System.out.print(i + " ");
95 count++;
96 }
97 if(count == 5){
98 System.out.println();
99 count = 0;
100 }
101 }
102 }
103
104 public static void myTest4(){
105 /*
106 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
107 假如兔子都不死,问第二十个月的兔子对数为多少?
108
109 1:为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20
110 2:因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1个元素,第2个元素值也都是1
111 3:用循环实现计算每个月的兔子对数
112 4:输出数组中最后一个元素的值,就是第20个月的兔子对数
113 */
114
115 int[] arr = new int[20];
116 arr[0] = 1;
117 arr[1] = 1;
118
119 // arr[2] = arr[0] + arr[1];
120 // arr[3] = arr[1] + arr[2];
121 // arr[4] = arr[2] + arr[3];
122
123 for(int i=2; i<arr.length; i++){
124 arr[i] = arr[i-2] + arr[i-1]; //规律总结
125 }
126
127 System.out.println("第二十个月的兔子对数:" + arr[19]);
128 }
129
130 public static void myTest5(){ // 百钱白鸡
131 /*
132 我国古代数学家张丘建在《算经》一书中提出的数学问题:
133 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
134 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
135
136 x+y+z=100
137 5x+3y+z/3=100
138 0<=x<=20
139 0<=y<=33;
140 0<=z<=100
141
142 1:第1层循环,用于表示鸡翁的范围,初始化表达式的变量定义为 x=0,判断条件是x<=20
143 2:第2层循环,用于表示鸡母的范围,初始化表达式的变量定义为 y=0,判断条件是y<=33
144 3:这个时候,用于表示鸡雏的变量 z = 100 – x – y
145 4:判断表达式 z%3==0 和表达式 5*x + 3*y + z/3 = 100 是否同时成立,
146 如果成立,输出对应的x,y,z 的值,就是对应的鸡翁,鸡母,鸡雏的值
147 */
148 for(int x=0; x<20; x++){
149 for(int y=0; y<33; y++){
150 int z = 100 - x - y; //z<=100
151 if( (z%3 == 0) && (5*x + 3*y + z/3 == 100) ){
152 System.out.println("鸡翁:" + x + " 鸡母:" + y + " 鸡雏:" + z);
153 }
154 }
155 }
156 }
157
158 public static void myTest6(){
159 /*
160 有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。
161 求出该数组中满足要求的元素和, 要求是:
162 求和的元素个位和十位都不能是7,并且只能是偶数
163 */
164
165 int[] arr = {68,27,95,88,171,996,51,210};
166 int sum = 0;
167 for(int i=0; i<arr.length; i++){
168 if( (arr[i]%10 != 7) && (arr[i]/10%10 != 7) && (arr[i]%2 == 0) ){
169 sum+=arr[i];
170 }
171 }
172 System.out.println("sum=" + sum);
173 }
174
175 public static void myTest7(){
176 /*
177 定义一个方法,用于比较两个数组的内容是否相同
178
179 1:定义两个数组,分别使用静态初始化完成数组元素的初始化
180 2:定义一个方法,用于比较两个数组的内容是否相同
181 3:比较两个数组的内容是否相同,按照下面的步骤实现就可以了
182 首先比较数组长度,如果长度不相同,数组内容肯定不相同,返回false
183 其次遍历,比较两个数组中的每一个元素,只要有元素不相同,返回false
184 最后循环遍历结束后,返回true
185 4:调用方法,用变量接收,输出结果
186 */
187
188 int[] arr1 = {1, 2, 3, 4, 5};
189 int[] arr2 = {2, 4, 6, 8, 10};
190 int[] arr3 = {1, 2, 3, 4, 5};
191 boolean result = compare(arr1, arr3);
192 if(result){
193 System.out.println("两个数组相同");
194 }else {
195 System.out.println("两个数组不同");
196 }
197 }
198
199 public static boolean compare(int[] arr1, int[] arr2){
200 if(arr1.length != arr2.length){
201 return false;
202 }
203 //arr1.length == arr2.length
204 for(int i=0; i<arr1.length; i++){
205 if(arr1[i] != arr2[i]){
206 return false;
207 }
208 }
209 return true;
210 }
211
212 public static void myTest8(){
213 /*
214 已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,
215 查找该数据在数组中的索引。并在控制台输出找到的索引值。如果没有查找到,则输出-1
216
217 1:定义一个数组,用静态初始化完成数组元素的初始化
218 2:键盘录入要查找的数据,用一个变量接收
219 3:定义一个索引变量,初始值为-1
220 4:遍历数组,获取到数组中的每一个元素
221 5:拿键盘录入的数据和数组中的每一个元素进行比较,如果值相同,就把该值对应的索引赋值给索引变量,并
222 结束循环
223 6:输出索引变量
224 */
225
226 int[] arr = {19, 28, 37, 46, 50};
227 int index = -1;
228 Scanner sc = new Scanner(System.in);
229 System.out.print("请输入要查找的数据:");
230 int inputNum = sc.nextInt();
231 for(int i=0; i<arr.length; i++){
232 if(arr[i] == inputNum){
233 index = i;
234 break;
235 }else {
236 index = -1;
237 }
238 }
239 System.out.println(index);
240 }
241
242 public static void myTest9(){
243 /*
244 已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值交换,
245 交换后的数组 arr = {50, 46, 37, 28,19}; 并在控制台输出交换后的数组元素。
246
247 1:定义一个数组,用静态初始化完成数组元素的初始化
248 2:循环遍历数组,这一次初始化语句定义两个索引变量,判断条件是开始索引小于等于结束索引
249 3:变量交换
250 4:遍历数组
251 */
252
253 int[] arr = {19, 28, 37, 46, 50};
254 System.out.println("反转前:");
255 for(int i=0; i<arr.length; i++){
256 System.out.print(arr[i] + " ");
257 }
258 System.out.println();
259
260 // int index_start = 0;
261 // int index_end = arr.length-1;
262 // while (index_start <= index_end){
263 // int temp = arr[index_start];
264 // arr[index_start] = arr[index_end];
265 // arr[index_end] = temp;
266 // index_start++;
267 // index_end--;
268 // }
269
270 for(int start=0, end=arr.length-1; start<=end; start++, end--){
271 int temp = arr[start];
272 arr[start] = arr[end];
273 arr[end] = temp;
274 }
275
276 System.out.println("反转后:");
277 for(int i=0; i<arr.length; i++){
278 System.out.print(arr[i] + " ");
279 }
280 System.out.println();
281 }
282
283 public static void myTest10(){
284 /*
285 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
286 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值。
287
288 1:定义一个数组,用动态初始化完成数组元素的初始化,长度为6
289 2:键盘录入评委分数
290 3:由于是6个评委打分,所以,接收评委分数的操作,用循环改进
291 4:定义方法实现获取数组中的最高分(数组最大值),调用方法
292 5:定义方法实现获取数组中的最低分(数组最小值) ,调用方法
293 6:定义方法实现获取数组中的所有元素的和(数组元素求和) ,调用方法
294 7:按照计算规则进行计算得到平均分
295 8:输出平均分
296 */
297
298 int[] arr = new int[6];
299 Scanner sc = new Scanner(System.in);
300 for(int i=1; i<=6; i++){
301 System.out.print("请输入第" + i + "个评委的打分:");
302 arr[i-1] = sc.nextInt();
303 }
304
305 System.out.print("评委打分情况:");
306 for(int j=0; j<arr.length; j++){
307 System.out.print(arr[j] + " ");
308 }
309 System.out.println();
310
311 int min = arr[0], max=arr[0], sum=0;
312 for(int x=0; x<arr.length; x++){
313 if(min > arr[x]){
314 min = arr[x];
315 }
316 if(max < arr[x]){
317 max = arr[x];
318 }
319 sum += arr[x];
320 }
321 // System.out.println(max);
322 // System.out.println(min);
323
324 double avg = (double)(sum - min - max) / (arr.length - 2);
325 System.out.println("最终得分:" + avg);
326 }
327
328 }