黑马java代码04-05.docx

01_选择结构(switch语句)

  1 /*
  2     switch语句格式:
  3         switch(表达式) {
  4             case 值1:
  5                 语句体1;
  6                 break;
  7             case 值2:
  8                 语句体2;
  9                 break;
 10             ...
 11             default:
 12                 语句体n+1;
 13                 break;
 14         }
 15         
 16     格式的解释:
 17         switch:表示这是switch选择结构
 18         表达式:这个地方的取值是有限定的
 19             byte,short,int,char
 20             JDK5以后可以是枚举
 21             JDK7以后可以是字符串
 22         case:后面跟的是要和表达式进行比较的值
 23         语句体:要执行的代码
 24         break:表示中断,结束的意思,可以控制switch语句的结束。
 25         default:当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。
 26     
 27     面试题:
 28         byte可以作为switch的表达式吗?
 29         long可以作为switch的表达式吗?
 30         String可以作为switch的表达式吗?
 31         
 32     案例:
 33         键盘录入一个数据,根据这个数据,我们输出对应的星期?
 34             键盘录入1,对应输出星期一
 35             键盘录入2,对应输出星期二
 36             ...
 37             键盘录入7,对应输出星期日
 38             
 39     分析:
 40         1:键盘录入,用Scanner实现
 41         2:判断我们既可以使用if语句,也可以使用我们要讲解的switch语句
 42         
 43     注意:
 44         A:遇到左大括号缩进一个tab的位置。
 45         B:关联不是很大的语句间空行
 46 */
 47 import java.util.Scanner;
 48 class SwitchDemo {
 49     public static void main(String[] args) {
 50         //创建键盘录入对象
 51         Scanner sc = new Scanner(System.in);
 52         
 53         //控制键盘录入数据
 54         System.out.println("请输入一个数据(1-7):");
 55         int week = sc.nextInt(); //3
 56         
 57         //switch判断语句
 58         switch(week) {
 59             case 1:
 60                 System.out.println("星期一");
 61                 break;
 62             case 2:
 63                 System.out.println("星期二");
 64                 break;
 65             case 3:
 66                 System.out.println("星期三");
 67                 break;
 68             case 4:
 69                 System.out.println("星期四");
 70                 break;
 71             case 5:
 72                 System.out.println("星期五");
 73                 break;
 74             case 6:
 75                 System.out.println("星期六");
 76                 break;
 77             case 7:
 78                 System.out.println("星期日");
 79                 break;
 80             default:
 81                 System.out.println("你输入的数据有误");
 82                 break;
 83         }
 84     }
 85 }
 86 /*
 87     switch语句的注意事项:
 88         A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
 89         B:default可以省略吗?
 90             可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
 91             特殊情况:
 92                 case就可以把值固定。
 93                 A,B,C,D
 94         C:break可以省略吗?
 95             可以省略,但是结果可能不是我们想要的。
 96             会出现一个现象:case穿透。
 97             最终我们建议不要省略
 98         D:default一定要在最后吗?
 99             不是,可以在任意位置。但是建议在最后。
100         E:switch语句的结束条件
101             a:遇到break就结束了
102             b:执行到末尾就结束了
103 */
104 import java.util.Scanner;
105 
106 class SwitchDemo2 {
107     public static void main(String[] args) {
108         //创建键盘录入对象
109         Scanner sc = new Scanner(System.in);
110         
111         //控制键盘录入数据
112         System.out.println("请输入一个数据(1-7):");
113         int week = sc.nextInt(); //3
114         
115         //定义常量
116         //int number = 3;
117         //然后把case后面的值改为number,就会报错
118         
119         //switch判断语句
120         switch(week) {
121             case 1:
122                 System.out.println("星期一");
123                 break;
124             case 2:
125                 System.out.println("星期二");
126                 break;
127             case 3:
128                 System.out.println("星期三");
129                 break;
130             case 4:
131                 System.out.println("星期四");
132                 break;
133             case 5:
134                 System.out.println("星期五");
135                 break;
136             case 6:
137                 System.out.println("星期六");
138                 break;
139             case 7:
140                 System.out.println("星期日");
141                 break;
142             default:
143                 System.out.println("你输入的数据有误");
144                 //break;
145         }
146     }
147 }
148 
149 /*
150     看程序写结果
151 */
152 class SwitchTest {
153     public static void main(String[] args) {
154         int x = 2;
155         int y = 3;
156         switch(x){
157             default:
158                 y++;
159                 break;
160             case 3:
161                 y++;
162             case 4:
163                 y++;
164         }
165         System.out.println("y="+y);
166         System.out.println("---------------");
167         
168         int a = 2;
169         int b = 3;
170         switch(a){
171             default:
172                 b++;
173             case 3:
174                 b++;
175             case 4:
176                 b++;
177         }
178         System.out.println("b="+b);
179     }
180 }
181 
182 /*
183     模拟单项选择题。
184     
185     分析:
186         A:出一个选择题,然后供你选择。
187         B:键盘录入选择的数据。
188         C:根据选择来给出你选择的结论。
189 */
190 import java.util.Scanner;
191 class SwitchTest2 {
192     public static void main(String[] args) {
193         //出一个选择题,然后供你选择。
194         //由于我们现在没有办法键盘录入得到一个'A','B'
195         //这样的东西,我就用65,66这样的值替代
196         //将来我们获取到这样的值以后,强制转换为字符类型
197         System.out.println("下面的几个人你最爱谁?");
198         System.out.println("65 林青霞");
199         System.out.println("66 张曼玉");
200         System.out.println("67 刘德华");
201         System.out.println("68 王力宏");
202         //键盘录入选择的数据。
203         Scanner sc = new Scanner(System.in);
204         System.out.println("请输入你的选择:");
205         int choiceNumber = sc.nextInt();
206         //强制转换为字符类型
207         char choice = (char) choiceNumber;
208         switch(choice) {
209             case 'A':
210                 System.out.println("恭喜你,选择正确");
211                 break;
212             case 'B':
213                 System.out.println("不好意思,你选择有误");
214                 break;
215             case 'C':
216                 System.out.println("不好意思,你选择有误");
217                 break;
218             case 'D':
219                 System.out.println("不好意思,你选择有误");
220                 break;
221             default:
222                 System.out.println("没有该选项");
223                 break;
224         }
225     }
226 }
227 
228 /*
229     根据你键盘录入的字符串,判断是否有满足要求的,如果有就输出。
230     否则,提示有误。
231     
232     String s = sc.nextLine();
233 */
234 import java.util.Scanner;
235 
236 class SwitchTest3 {
237     public static void main(String[] args) {
238         //创建键盘录入对象
239         Scanner sc = new Scanner(System.in);
240         
241         //录入数据
242         System.out.println("请输入你要判断的字符串:");
243         String s = sc.nextLine();
244         
245         switch(s) {
246             case "hello":
247                 System.out.println("你输入的是hello");
248                 break;
249             case "world":
250                 System.out.println("你输入的是world");
251                 break;
252             case "java":
253                 System.out.println("你输入的是java");
254                 break;
255             default:
256                 System.out.println("没有找到你输入的数据");
257                 //break;
258         }
259     }
260 }
261 
262 /*
263     用switch语句实现键盘录入月份,输出对应的季节
264     
265     分析:
266         A:键盘录入一个月份,用Scanner实现
267         B:用switch语句实现即可
268         
269     if语句和switch语句的区别?
270         if语句:
271             A:针对结果是boolean类型的判断
272             B:针对一个范围的判断
273             C:针对几个常量值的判断
274         
275         switch语句:
276             针对几个常量值的判断
277 */
278 import java.util.Scanner;
279 
280 class SwitchTest4 {
281     public static void main(String[] args) {
282         //创建键盘录入对象
283         Scanner sc = new Scanner(System.in);
284         
285         //录入数据
286         System.out.println("请输入月份(1-12):");
287         int month = sc.nextInt();
288         
289         /*
290         switch(month) {
291             case 1:
292                 System.out.println("冬季");
293                 break;
294             case 2:
295                 System.out.println("冬季");
296                 break;
297             case 3:
298                 System.out.println("春季");
299                 break;
300             case 4:
301                 System.out.println("春季");
302                 break;
303             case 5:
304                 System.out.println("春季");
305                 break;
306             case 6:
307                 System.out.println("夏季");
308                 break;
309             case 7:
310                 System.out.println("夏季");
311                 break;
312             case 8:
313                 System.out.println("夏季");
314                 break;
315             case 9:
316                 System.out.println("秋季");
317                 break;
318             case 10:
319                 System.out.println("秋季");
320                 break;
321             case 11:
322                 System.out.println("秋季");
323                 break;
324             case 12:
325                 System.out.println("冬季");
326                 break;
327             default:
328                 System.out.println("你输入的月份有误");
329         }
330         */
331         
332         //这样写太麻烦了,我们使用一个我们不想使用的东西:case穿透
333         switch(month) {
334             case 1:
335             case 2:
336             case 12:
337                 System.out.println("冬季");
338                 break;
339             case 3:
340             case 4:
341             case 5:
342                 System.out.println("春季");
343                 break;
344             case 6:
345             case 7:
346             case 8:
347                 System.out.println("夏季");
348                 break;
349             case 9:
350             case 10:
351             case 11:
352                 System.out.println("秋季");
353                 break;
354             default:
355                 System.out.println("你输入的月份有误");
356         }
357     }
358 }
View Code

02_循环结构(for语句)

  1 /*
  2     循环语句:for循环,while循环,do...while循环。
  3     
  4     for循环格式:
  5         for(初始化语句;判断条件语句;控制条件语句) {
  6             循环体语句;
  7         }
  8         
  9         执行流程:
 10             A:执行初始化语句
 11             B:执行判断条件语句,看其返回值是true还是false
 12                 如果是true,就继续执行
 13                 如果是false,就结束循环
 14             C:执行循环体语句;
 15             D:执行控制条件语句
 16             E:回到B继续。
 17             
 18     注意事项:
 19         A:判断条件语句无论简单还是复杂结果是boolean类型。
 20         B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
 21         C:一般来说:有左大括号就没有分号,有分号就没有左大括号
 22             
 23     需求:请在控制台输出10次"HelloWorld"
 24 */
 25 class ForDemo {
 26     public static void main(String[] args) {
 27         //最原始的做法
 28         System.out.println("HelloWorld");
 29         System.out.println("HelloWorld");
 30         System.out.println("HelloWorld");
 31         System.out.println("HelloWorld");
 32         System.out.println("HelloWorld");
 33         System.out.println("HelloWorld");
 34         System.out.println("HelloWorld");
 35         System.out.println("HelloWorld");
 36         System.out.println("HelloWorld");
 37         System.out.println("HelloWorld");
 38         System.out.println("----------");
 39         
 40         //这种做法不好,代码的重复度太高。
 41         //所以呢,我们用循环改进
 42         for(int x=1;x<=10;x++) {
 43             System.out.println("HelloWorld");
 44         }
 45     }
 46 }
 47 
 48 /*
 49     需求:请在控制台输出数据1-10
 50 */
 51 class ForDemo2 {
 52     public static void main(String[] args) {
 53         //原始做法
 54         System.out.println(1);
 55         System.out.println(2);
 56         System.out.println(3);
 57         System.out.println(4);
 58         System.out.println(5);
 59         System.out.println(6);
 60         System.out.println(7);
 61         System.out.println(8);
 62         System.out.println(9);
 63         System.out.println(10);
 64         
 65         System.out.println("-------------");
 66         
 67         //如何改进呢?用循环改进
 68         for(int x=1; x<=10; x++) {
 69             System.out.println(x);
 70         }
 71         
 72         System.out.println("-------------");
 73         
 74         //从0开始
 75         for(int x=0; x<10; x++) {
 76             System.out.println(x+1);
 77         }
 78     }
 79 }    
 80 
 81 
 82 /*
 83     需求:求出1-10之间数据之和
 84     
 85     分析:
 86         0+1=1
 87             1+2=3
 88                 3+3=6
 89                     6+4=10
 90                         10+5=15
 91                              ...
 92                              
 93         由此可见我们要定义两个变量:
 94             一个变量用于存储第一个加数,第一个加数其实保存的是以前的所有数据和。默认初始化值应该是0。
 95             一个变量用于存储第二个加数,第二个加数其实就是每次的数据变化的值。
 96             
 97     求和思想。        
 98 */
 99 class ForDemo3 {
100     public static void main(String[] args) {
101         //原始做法
102         System.out.println(1+2+3+4+5+6+7+8+9+10);
103         
104         //定义第一个加数
105         int sum = 0;
106         
107         for(int x=1; x<=10; x++) {
108             //这里的x其实是第二个加数
109             sum = sum + x;
110             /*
111                 0 + 1 = 1
112                         1 + 2 = 3
113                                 3 + 3 = 6
114                                 ...
115             */
116             //sum += x;
117         }
118         
119         System.out.println("sum:"+sum);
120     }
121 }
122 
123 /*
124     需求:
125         A:求1-100之和。
126         B:求出1-100之间偶数和
127         C:求出1-100之间奇数和(自己做)
128 */
129 class ForDemo4 {
130     public static void main(String[] args) {
131         //求1-100之和。
132         int sum1 = 0;
133         
134         for(int x=1; x<=100; x++) {
135             sum1 +=x;
136         }
137         
138         System.out.println("1-100之和是:"+sum1);
139         System.out.println("------------------");
140         
141         //求出1-100之间偶数和
142         //方式1
143         int sum2 = 0;
144         
145         for(int x=1; x<=100; x++) {
146             if(x%2 == 0) {
147                 sum2 += x;
148             }
149         }
150         
151         System.out.println("1-100偶数之和是:"+sum2);
152         System.out.println("------------------");
153         
154         //方式2
155         int sum3 = 0;
156         
157         for(int x=0; x<=100; x+=2) {
158                 sum3 += x;
159         }
160         
161         System.out.println("1-100偶数之和是:"+sum3);
162         System.out.println("------------------");
163     }
164 }
165 
166 /*
167     需求:求5的阶乘。
168     
169     什么是阶乘呢?
170         n! = n*(n-1)! 规则
171         n! = n*(n-1)*(n-2)*...*3*2*1
172         
173     求和思想。
174     求阶乘思想。
175 */
176 class ForDemo5 {
177     public static void main(String[] args) {
178         //定义最终结果变量
179         int jc = 1;
180         
181         //这里的x其实可以直接从2开始
182         //for(int x=1; x<=5; x++) 
183         
184         for(int x=2; x<=5; x++) {
185             jc *=x;
186         }
187         
188         System.out.println("1-5的阶乘是:"+jc);
189     }
190 }
191 
192 /*
193     天将降大任于斯人也,必先盗其QQ,封其微博,收其wifi,夺其手机。让其静心学习Java欧耶。
194 
195     需求:在控制台输出所有的”水仙花数”
196     
197     分析:
198         我们都不知道什么叫"水仙花数",你让我怎么做呢?
199         
200         所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
201         举例:153就是一个水仙花数。
202         153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
203 
204         A:三位数其实是告诉了我们范围。
205         B:通过for循环我们就可以实现获取每一个三位数
206           但是麻烦是如何获取这个三位数的个,十,百位上的数据
207           
208           我们如何获取一个数据的个,十,百呢?
209             假设有个一个数据:153
210             ge:    153%10 = 3
211             shi: 153/10%10 = 5
212             bai:153/10/10%10 = 1
213             qian:x/10/10/10%10
214             wan:  x/10/10/10/10%10
215             ...
216 
217         C:让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
218           如果相同,就把该数据在控制台输出。
219 */
220 class ForDemo6 {
221     public static void main(String[] args) {
222         //三位数其实是告诉了我们范围。
223         for(int x=100; x<1000; x++) {
224             int ge = x%10;
225             int shi = x/10%10;
226             int bai = x/10/10%10;
227             
228             //让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
229             if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
230                 //如果相同,就把该数据在控制台输出。
231                 System.out.println(x);
232             }
233         }
234     }
235 }
236 
237 /*
238     练习:
239         请在控制台输出满足如下条件的五位数
240         个位等于万位
241         十位等于千位
242         个位+十位+千位+万位=百位
243         
244     分析:
245         A:五位数就告诉了我们范围。
246         B:分解每一个五位数的个,十,百,千,万位上的数据
247         C:按照要求进行判断即可
248 */
249 class ForDemo7 {
250     public static void main(String[] args) {
251         //五位数就告诉了我们范围。
252         for(int x=10000; x<100000; x++) {
253             //分解每一个五位数的个,十,百,千,万位上的数据
254             int ge = x%10;
255             int shi = x/10%10;
256             int bai  = x/10/10%10;
257             int qian = x/10/10/10%10;
258             int wan = x/10/10/10/10%10;
259             
260             //按照要求进行判断即可
261             if((ge==wan) && (shi==qian) && (ge+shi+qian+wan==bai)) {
262                 System.out.println(x);
263             }
264         }
265     }
266 }
267 
268 /*
269     需求:统计”水仙花数”共有多少个
270     
271     分析:
272         A:首先必须知道什么是水仙花数
273             所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
274             举例:153就是一个水仙花数。
275             153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
276         B:定义统计变量,初始化值是0
277         C:三位数告诉了我们范围,用for循环就可以搞定
278         D:获取每一个三位数的个,十,百的数据
279         E:按照要求进行判断
280         F:如果满足要求就计数。
281 */
282 class ForDemo8 {
283     public static void main(String[] args) {
284         //定义统计变量,初始化值是0
285         int count = 0;
286         
287         //三位数告诉了我们范围,用for循环就可以搞定
288         for(int x=100; x<1000; x++) {
289             //获取每一个三位数的个,十,百的数据
290             int ge = x%10;
291             int shi = x/10%10;
292             int bai = x/10/10%10;
293             
294             //按照要求进行判断
295             if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
296                 //如果满足要求就计数。
297                 count++;
298             }
299         }
300         
301         System.out.println("水仙花数共有"+count+"个");
302     }
303 }
304 /*
305     需求:请统计1-1000之间同时满足如下条件的数据有多少个:
306             对3整除余2
307             对5整除余3
308             对7整除余2
309 
310     分析:
311         A:定义统计变量,初始化值是0
312         B:1-1000之间是一个范围,用for很容易就可以实现。
313         C:每个数据要同时满足如下要求
314             x%3==2
315             x%5==3
316             x%7==2
317         D:如果满足条件,统计数据++即可,最后输出统计变量
318 */
319 class ForDemo9 {
320     public static void main(String[] args) {
321         //定义统计变量,初始化值是0
322         int count = 0;
323     
324         //1-1000之间是一个范围,用for很容易就可以实现。
325         for(int x=1; x<=1000; x++) {
326             /*
327                 每个数据要同时满足如下要求
328                 x%3==2
329                 x%5==3
330                 x%7==2
331             */
332             if(x%3==2 && x%5==3 && x%7==2) {
333                 count++;
334                 System.out.println(x);
335             }
336         }
337         
338         //输出数据
339         System.out.println("满足这样条件的数据共有:"+count+"个");
340     }
341 }
View Code

03_循环结构(while语句)

  1 /*
  2     while循环的基本格式:
  3         while(判断条件语句) {
  4             循环体语句;
  5         }
  6         
  7         扩展格式:
  8         
  9         初始化语句;
 10         while(判断条件语句) {
 11              循环体语句;
 12              控制条件语句;
 13         }
 14         
 15         通过这个格式,我们就可以看到其实和for循环是差不多的。
 16         
 17         for(初始化语句;判断条件语句;控制条件语句) {
 18             循环体语句;
 19         }
 20 */
 21 class WhileDemo {
 22     public static void main(String[] args) {
 23         //输出10次"HelloWorld"
 24         //for语句版
 25         for(int x=0; x<10; x++) {
 26             System.out.println("HelloWorld");
 27         }
 28         System.out.println("--------------");
 29         //while语句版
 30         int x=0;
 31         while(x<10) {
 32             System.out.println("HelloWorld");
 33             x++;
 34         }    
 35     }
 36 }
 37 
 38 /*
 39     练习:用while循环实现
 40     左边:求出1-100之和
 41     右边:统计水仙花数有多少个
 42     
 43     初始化语句;
 44     while(判断条件语句) {
 45          循环体语句;
 46          控制条件语句;
 47     }
 48     
 49     
 50     
 51     for(初始化语句;判断条件语句;控制条件语句) {
 52         循环体语句;
 53     }
 54 
 55 */
 56 class WhileDemo2 {
 57     public static void main(String[] args) {
 58         //求出1-100之和
 59         //for语句版本
 60         int sum = 0;
 61         
 62         for(int x=1; x<=100; x++) {
 63             sum+=x;
 64         }
 65         
 66         System.out.println("sum:"+sum);
 67         System.out.println("--------");
 68         //while语句版本
 69         int sum2 = 0;
 70         
 71         int y=1;
 72         while(y<=100) {
 73             sum2+=y;
 74             y++;
 75         }
 76         
 77         System.out.println("sum2:"+sum2);
 78         System.out.println("--------");
 79     }
 80 }
 81 
 82 /*
 83     需求:统计水仙花数有多少个
 84 */
 85 class WhileDemo3 {
 86     public static void main(String[] args) {
 87         //for循环版本
 88         int count = 0;
 89         
 90         for(int x=100; x<1000; x++) {
 91             int ge = x%10;
 92             int shi = x/10%10;
 93             int bai = x/10/10%10;
 94             
 95             if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
 96                 count++;
 97             }
 98         }
 99         
100         System.out.println("count:"+count);
101         System.out.println("------------");
102         
103         //while循环版本
104         int count2 = 0;
105         
106         int y = 100;
107         while(y<1000) {
108             int ge = y%10;
109             int shi = y/10%10;
110             int bai = y/10/10%10;
111             
112             if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == y) {
113                 count2++;
114             }
115             
116             y++;
117         }
118         
119         System.out.println("count2:"+count2);
120     }
121 }
122 
123 /*
124     while循环和for循环的区别?
125         使用区别:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。
126                   因为变量及早的从内存中消失,可以提高内存的使用效率。
127                   
128         其实还有一种场景的理解:
129             如果是一个范围的,用for循环非常明确。
130             如果是不明确要做多少次,用while循环较为合适。
131                 举例:吃葡萄。
132 */
133 class WhileDemo4 {
134     public static void main(String[] args) {
135         //for循环实现
136         for(int x=0; x<10; x++) {
137             System.out.println("学习Java技术哪家强,中国北京传智播客");
138         }
139         //这里不能在继续访问了
140         //System.out.println(x);
141         
142         //while循环实现
143         int y = 0;
144         while(y<10) {
145             System.out.println("学习Java技术哪家强,中国北京传智播客");
146             y++;
147         }
148         //这里是可以继续访问的
149         System.out.println(y);
150     }
151 } 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 /*
162     我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
163     请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
164 
165     分析:
166         A:定义一个统计变量,默认值是0
167         B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度
168           我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
169         C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
170           折叠一次有什么变化呢?就是厚度是以前的2倍。
171         D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
172         E:输出统计变量。
173 */
174 class WhileDemo5 {
175     public static void main(String[] args) {
176         //定义一个统计变量,默认值是0
177         int count = 0;
178         
179         //最高山峰是珠穆朗玛峰:8848m这是最终的厚度
180         //我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
181         //为了简单,我把0.01变成1,同理8848就变成了884800
182         int end = 884800;
183         int start = 1;
184         
185         while(start<end) {
186             //只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
187             count++;
188             
189             //折叠一次有什么变化呢?就是厚度是以前的2倍。
190             start *= 2;
191             
192             System.out.println("第"+count+"次厚度是"+start);
193         }
194         
195         //输出统计变量。
196         System.out.println("要叠"+count+"次");
197     }
198 }
View Code

04_循环结构(dowhile语句)

 1 /*
 2     do...while循环的基本格式:
 3         do {
 4             循环体语句;
 5         }while(判断条件语句);
 6         
 7         扩展格式;
 8         初始化语句;
 9         do {
10             循环体语句;
11             控制条件语句;
12         }while(判断条件语句);
13 */
14 class DoWhileDemo {
15     public static void main(String[] args) {
16         //输出10次HelloWorld。
17         int x = 0;
18         do {
19             System.out.println("HelloWorld");
20             x++;
21         }while(x<10);
22         
23         System.out.println("--------------");
24         
25         //求和1-100
26         int sum = 0;
27         int a = 1;
28         do {
29             sum += a;
30             a++;
31         }while(a<=100);
32         System.out.println(sum);
33     }
34 }
35 
36 /*
37     循环语句的区别:
38         do...while循环至少执行一次循环体。
39         而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
40     那么,我们一般使用哪种循环呢?
41         优先考虑for,其次考虑while,最后考虑do...while
42 */
43 class DoWhileDemo2 {
44     public static void main(String[] args) {
45         int x = 3;
46         while(x < 3) {
47             System.out.println("我爱林青霞");
48             x++;
49         }
50         System.out.println("--------------");
51         int y = 3;
52         do {
53             System.out.println("我爱林青霞");
54             y++;
55         }while(y < 3);
56     }
57 }
58 
59 /*
60     注意死循环:
61         A:一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
62         B:两种最简单的死循环格式
63             while(true){...}
64             for(;;){...}            
65 */
66 class DoWhileDemo3 {
67     public static void main(String[] args) {
68         int x = 0;
69         while(x < 10) {
70             System.out.println(x);
71             x++;
72         }
73         System.out.println("--------------");
74         /*
75         while(true) {
76             System.out.println("今天我很高兴,学习了死循环");
77         }
78         */
79         for(;;){
80             System.out.println("今天我很高兴,学习了死循环");
81         }
82         
83         //System.out.println("--------------");
84     }
85 }
View Code

05_循环嵌套

  1 /*
  2     需求:请输出一个4行5列的星星(*)图案。
  3     结果:
  4         *****
  5         *****
  6         *****
  7         *****
  8         
  9     循环嵌套:就是循环语句的循环体本身是一个循环语句。
 10     
 11     通过结果我们知道这样的一个结论:
 12         外循环控制行数
 13         内循环控制列数
 14 */
 15 class ForForDemo {
 16     public static void main(String[] args) {
 17         //原始做法
 18         System.out.println("*****");
 19         System.out.println("*****");
 20         System.out.println("*****");
 21         System.out.println("*****");
 22         System.out.println("-------------");
 23         
 24         //虽然可以完成需求,但是不是很好
 25         //如果是多行多列就会比较麻烦
 26         //所以我们准备改进
 27         //如何改进呢?
 28         //我先考虑如何实现一行*的问题
 29         //System.out.println("*****");
 30         //我们要想的是如何实现一次输出一颗*的问题
 31         //System.out.println("*");
 32         //System.out.println("*");
 33         //现在虽然可以一次一颗*,但是却换行了,我要求不能换行,怎么办呢?
 34         //输出语句的另一种格式:System.out.print(); 这个是不带换行的
 35         //System.out.print("*");
 36         //System.out.print("*");
 37         //System.out.print("*");
 38         //System.out.print("*");
 39         //System.out.print("*");
 40         //如果我要在一行上打出多颗*,比较麻烦,而代码是重复的,所以我决定用循环改进
 41         for(int x=0; x<5; x++) {
 42             System.out.print("*");
 43         }
 44         //我们可以通过空的输出语句实现换行:System.out.println();
 45         System.out.println();
 46         
 47         //既然我可以打出一行,我就可以打出第二行
 48         for(int x=0; x<5; x++) {
 49             System.out.print("*");
 50         }
 51         //我们可以通过空的输出语句实现换行:System.out.println();
 52         System.out.println();
 53     
 54         //同理打出第三行,第四行
 55         for(int x=0; x<5; x++) {
 56             System.out.print("*");
 57         }
 58         //我们可以通过空的输出语句实现换行:System.out.println();
 59         System.out.println();
 60         
 61         //既然我可以打出一行,我就可以打出第二行
 62         for(int x=0; x<5; x++) {
 63             System.out.print("*");
 64         }
 65         //我们可以通过空的输出语句实现换行:System.out.println();
 66         System.out.println();
 67         System.out.println("-----------------");
 68         //同样的代码出现了4次,说明我们程序写的不好,用循环改进
 69         for(int y=0; y<4; y++) {
 70             for(int x=0; x<5; x++) {
 71                 System.out.print("*");
 72             }
 73             //我们可以通过空的输出语句实现换行:System.out.println();
 74             System.out.println();
 75         }
 76     }
 77 }
 78 
 79 /*
 80     需求:请输出下列的形状
 81         *
 82         **
 83         ***
 84         ****
 85         *****
 86 */
 87 class ForForDemo2 {
 88     public static void main(String[] args) {
 89         //通过简单的观察,我们看到这是一个行是5,列数是变化的形状
 90         //我们先打印出一个5行5列的形状
 91         for(int x=0; x<5; x++) {
 92             for(int y=0; y<5; y++) {
 93                 System.out.print("*");
 94             }
 95             System.out.println();
 96         }
 97         
 98         System.out.println("--------------");
 99         
100         //我们实现了一个5行5列的形状
101         //但是这不是我们想要的
102         //我们要的是列数变化的
103         //列数是如何变化的呢?
104         //第一行:1列    y=0,y<=0,y++
105         //第二行:2列    y=0,y<=1,y++
106         //第三行:3列    y=0,y<=2,y++
107         //第四行:4列    y=0,y<=3,y++
108         //第五行:5列    y=0,y<=4,y++
109         //在看外循环x的变化,恰好就是x=0,1,2,3,4
110         //所以这个最终版的程序就是如下
111         for(int x=0; x<5; x++) {
112             for(int y=0; y<=x; y++) {
113                 System.out.print("*");
114             }
115             System.out.println();
116         }
117     }
118 }
119 
120 
121 /*
122     需求:在控制台输出九九乘法表。
123     
124     首先我们写出九九乘法表:
125         1*1=1
126         1*2=2    2*2=4
127         1*3=3    2*3=6    3*3=9
128         1*4=4    2*4=8    3*4=12    4*4=16
129         ...
130         1*9=9    2*9=18    3*9=27    ...
131         
132     我们先把这个九九乘法表看出是这样的一个形状:
133         *
134         **
135         ***
136         ****
137         *****
138         ******
139         *******
140         ********
141         *********
142         
143     注意:
144         '\x' x表示任意,这种做法叫转移字符。
145         
146         '\t'    tab键的位置
147         '\r'    回车
148         '\n'    换行
149 */
150 class ForForDemo3 {
151     public static void main(String[] args) {
152         for(int x=0; x<9; x++) {
153             for(int y=0; y<=x; y++) {
154                 System.out.print("*");
155             }
156             System.out.println();
157         }
158         System.out.println("--------------");
159         //为了使用数据,我们从1开始
160         for(int x=1; x<=9; x++) {
161             for(int y=1; y<=x; y++) {
162                 System.out.print(y+"*"+x+"="+y*x+"\t");
163             }
164             System.out.println();
165         }
166     }
167 }
View Code

06_跳转语句

  1 /*
  2     控制跳转语句:
  3         break:中断
  4         continue:继续
  5         return:返回
  6     
  7     break:中断的意思
  8     使用场景:
  9         A:switch语句中
 10         B:循环语句中。
 11             (循环语句中加入了if判断的情况)
 12         注意:离开上面的两个场景,无意义。
 13         
 14     如何使用呢?
 15         A:跳出单层循环
 16         B:跳出多层循环
 17             要想实现这个效果,就必须知道一个东西。带标签的语句。
 18             格式:
 19                 标签名: 语句
 20 */
 21 class BreakDemo {
 22     public static void main(String[] args) {
 23         //在 switch 或 loop 外部中断
 24         //break;
 25         //跳出单层循环
 26         for(int x=0; x<10; x++) {
 27             if(x == 3) {
 28                 break;
 29             }
 30             System.out.println("HelloWorld");
 31         }
 32         System.out.println("over");
 33         System.out.println("-------------");
 34         wc:for(int x=0; x<3; x++) {
 35             nc:for(int y=0; y<4; y++) {
 36                 if(y == 2) {
 37                     //break nc;
 38                     break wc;
 39                 }
 40                 System.out.print("*");
 41             }
 42             System.out.println();
 43         }
 44     }
 45 }
 46 
 47 /*
 48     continue:继续
 49     
 50     使用场景:
 51         循环中。离开此场景无意义。
 52         
 53     测试,找到和break的区别:
 54         break:跳出单层循环
 55         continue:跳出一次循环,进入下一次的执行
 56         
 57     练习题:
 58         for(int x=1; x<=10; x++) {
 59             if(x%3==0) {
 60                 //在此处填写代码
 61             }
 62             System.out.println(“Java基础班”);
 63         }
 64         
 65         我想在控制台输出2次:“Java基础班“
 66             break;
 67         我想在控制台输出7次:“Java基础班“
 68             continue;
 69         我想在控制台输出13次:“Java基础班“    
 70             System.out.println(“Java基础班”);
 71 
 72 
 73 */
 74 class ContinueDemo {
 75     public static void main(String[] args) {
 76         for(int x=0; x<10; x++) {
 77             if(x == 3) {
 78                 //break;
 79                 continue;
 80             }
 81             
 82             System.out.println(x);
 83         }
 84     }
 85 }
 86 
 87 /*
 88     return:返回
 89     
 90     其实它的作用不是结束循环的,而是结束方法的。
 91 */
 92 class ReturnDemo {
 93     public static void main(String[] args) {
 94         for(int x=0; x<10; x++) {
 95             if(x == 2) {
 96                 System.out.println("退出");
 97                 //break;
 98                 //continue;
 99                 return;
100             }
101             
102             System.out.println(x);
103         }
104         
105         System.out.println("over");
106     }
107 }
108 
109 /*
110     需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,
111           每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
112           请问,经过多少天,小芳才可以存到100元钱。
113 
114     分析:
115         A:小芳的妈妈每天给她2.5元钱
116             double dayMoney = 2.5;
117         B:她都会存起来
118             double daySum = 0;
119         C:从第一天开始存储
120             int dayCount = 1;
121         D:经过多少天,小芳才可以存到100元钱。
122             double result = 100;
123         E:这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
124             说明要判断dayCount的值,如果对5整除就减去6元钱。
125                 daySum -= 6;
126           由此还隐含了一个问题,就是如果不是5的倍数天的话,钱要累加
127                 daySum += dayMoney;
128         F:因为不知道是多少天,所以我用死循环,一旦超过100元我就退出循环。
129 */
130 class WhileDemo {
131     public static void main(String[] args) {
132         //每天要存储的钱是2.5元
133         double dayMoney = 2.5;
134         
135         //存钱的初始化值是0
136         double daySum = 0;
137         
138         //从第一天开始存储
139         int dayCount = 1;
140         
141         //最终存储不小于100就不存储了
142         int result = 100;
143         
144         //因为不知道是多少天,所以我用死循环,
145         while(true) {
146             //累加钱
147             daySum += dayMoney;
148             
149             //一旦超过100元我就退出循环。
150             if(daySum >= result) {
151                 System.out.println("共花了"+dayCount+"天存储了100元");
152                 break;
153             }
154             
155             if(dayCount%5 == 0) {
156                 //花去6元钱
157                 daySum -= 6;
158                 System.out.println("第"+dayCount+"天花了6元钱");
159             }
160             
161             //天数变化
162             dayCount++;
163         }
164     }
165 }
View Code

小结:

  1 1:switch语句(掌握)
  2     (1)格式:
  3         switch(表达式) {
  4             case 值1:
  5                 语句体1;
  6                 break;
  7             case 值2:
  8                 语句体2;
  9                 break;
 10             ...
 11             default:
 12                 语句体n+1;
 13                 break;
 14         }
 15         
 16         格式解释说明:
 17             switch:说明这是switch语句。
 18             表达式:可以是byte,short,int,char
 19                 JDK5以后可以是枚举
 20                 JDK7以后可以是字符串
 21             case:后面的值就是要和表达式进行比较的值
 22             break:表示程序到这里中断,跳出switch语句
 23             default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
 24     (2)面试题
 25         switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
 26             可以,不可以,JDK7以后可以
 27     (3)执行流程:
 28         A:首先计算表达式的值
 29         B:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
 30         C:如果没有匹配,就执行default的语句体n+1 31     (4)注意事项:
 32         A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
 33         B:default可以省略吗?
 34             可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
 35             特殊情况:
 36                 case就可以把值固定。
 37                 A,B,C,D
 38         C:break可以省略吗?
 39             可以省略,但是结果可能不是我们想要的。
 40             会出现一个现象:case穿透。
 41             最终我们建议不要省略
 42         D:default一定要在最后吗?
 43             不是,可以在任意位置。但是建议在最后。
 44         E:switch语句的结束条件
 45             a:遇到break就结束了
 46             b:执行到末尾就结束了
 47     (5)案例:
 48         A:键盘录入一个数字(1-7),输出对应的星期几。
 49         B:单项选择题
 50         C:键盘录入一个字符串的问题
 51             String s = sc.nextLine();
 52         D:根据给定的月份,输出对应的季节
 53     (6)if语句和switch语句各自的场景
 54         A:if
 55             针对boolean类型的判断
 56             针对一个范围的判断
 57             针对几个常量的判断
 58         B:switch
 59             针对几个常量的判断
 60 
 61 2:循环语句(掌握)
 62     (1)有三种:for,while,do...while
 63     (2)for循环语句
 64         A:格式
 65             for(初始化语句;判断条件语句;控制条件语句){
 66                 循环体语句;
 67             }
 68             
 69             执行流程:
 70                 a:执行初始化语句
 71                 b:执行判断条件语句
 72                     如果这里是true,就继续
 73                     如果这里是false,循环就结束
 74                 c:执行循环体语句
 75                 d:执行控制条件语句
 76                 e:回到b
 77         B:注意事项
 78             a:判断条件语句无论简单还是复杂,结果是boolean类型
 79             b:循环体语句如果是一条,可以省略大括号,但是不建议
 80             c:有分号就没有左大括号,有左大括号就没有分号
 81         C:案例
 82             a:输出10次HelloWorld
 83             b:输出1-10的数据
 84             c:输出10-1的数据
 85             d:求1-10的和
 86             e:求1-100的和,求1-100的偶数和,求1-100的奇数和
 87             f:求5的阶乘
 88             g:在控制台打印水仙花数
 89             h:统计水仙花个数
 90             i:改进版的回文数
 91                 一个五位数
 92                 个位 = 万位
 93                 十位 = 千位
 94                 个位 + 十位 + 千位 + 万位 = 百位
 95             j:统计1-1000之间同时满足如下条件的数据有多少个
 96                 x%3==2
 97                 x%5==3
 98                 x%7==2
 99     (3)while循环
100         A:基本格式
101             while(判断条件语句) {
102                 循环体语句;
103             }
104             
105             扩展格式:
106             初始化语句;
107             while(判断条件语句){
108                 循环体语句;
109                 控制条件语句;
110             }
111             
112             通过查看这个格式,我们就知道while循环可以和for循环等价转换。
113         B:while的练习
114             把for语句的练习用while改进
115         C:for和while的区别
116             a:使用上的区别
117                 for语句的那个控制条件变量,在循环结束后不能在使用了。
118                 而while的可以继续使用。
119             b:理解上的区别
120                 for适合于一个范围的判断
121                 while适合次数不明确的
122                     举例:吃葡萄
123         D:案例:
124             a:珠穆朗玛峰问题
125             b:小芳存钱问题(break以后才能做)
126     (4)do...while循环
127         A:基本格式
128             do {
129                 循环体语句;
130             }while(判断条件语句);
131             
132             扩展格式:
133             初始化语句;
134             do {
135                 循环体语句;
136                 控制条件语句;
137             }while(判断条件语句);
138             
139             通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
140         B:三种循环的区别
141             a:do...while循环至少执行一次循环体
142             b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
143     (5)循环使用的注意事项(死循环)
144         A:一定要注意修改控制条件,否则容易出现死循环。
145         B:最简单的死循环格式
146             a:while(true){...}
147             
148             b:for(;;){}
149             
150 3:控制跳转语句(掌握)
151     (1)break:中断的意思
152         A:用在循环和switch语句中,离开此应用场景无意义。
153         B:作用
154             a:跳出单层循环
155             b:跳出多层循环,需要标签语句的配合
156     (2)continue:继续
157         A:用在循环中,离开此应用场景无意义。
158         B:作用
159             a:跳出单层循环的一次,可以继续下一次
160         C:填空题
161             for(int x=1; x<=10; x++) {
162                 if(x%3 == 0) {
163                     //补齐代码
164                 }
165                 System.out.println("Java基础班");
166             }
167             如何让控制台输出2次:Java基础班
168             如何让控制台输出7次:Java基础班
169             如何让控制台输出13次:Java基础班
170     (3)return:返回
171         A:用于结束方法的,后面还会在继续讲解和使用。
172         B:一旦遇到return,程序就不会在继续往后执行。
View Code

01_方法

  1 /*
  2     方法:完成特定功能的代码块。
  3     
  4     注意:在很多语言里面有函数的定义,而在Java中函数被称为方法。
  5 
  6     方法格式:
  7         修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
  8             方法体语句;
  9             return 返回值; 
 10         }
 11     详细解释:
 12         修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。
 13         返回值类型:就是功能结果的数据类型。
 14         方法名:符合命名规则即可。方便我们的调用。
 15         参数:
 16             实际参数:就是实际参与运算的。
 17             形式参数;就是方法定义上的,用于接收实际参数的。
 18         参数类型:就是参数的数据类型
 19         参数名:就是变量名
 20         方法体语句:就是完成功能的代码。
 21         return:结束方法的。
 22         返回值:就是功能的结果,由return带给调用者。
 23         
 24     要想写好一个方法,就必须明确两个东西:
 25         A:返回值类型
 26             结果的数据类型
 27         B:参数列表
 28             你要传递几个参数,以及每个参数的数据类型
 29             
 30     需求:求两个数据之和的案例
 31     
 32     方法的执行特点:
 33         不调用,不执行。
 34         
 35     如何调用呢?(有明确返回值的调用)
 36         A:单独调用,一般来说没有意义,所以不推荐。
 37         B:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。
 38         C:赋值调用,推荐方案。
 39         
 40 */
 41 class FunctionDemo {
 42     public static void main(String[] args) {
 43         int x = 10;
 44         int y = 20;
 45         
 46         //方式1:单独调用
 47         //sum(x,y);
 48     
 49         //方式2:输出调用
 50         //System.out.println(sum(x,y));
 51         //System.out.println(30);
 52     
 53         //方式3:赋值调用
 54         int result = sum(x,y);
 55         //result在这里可以进行操作
 56         System.out.println(result);
 57     }
 58     
 59     /*
 60         需求:求两个数据之和的案例
 61         
 62         两个明确:
 63             返回值类型:int
 64             参数列表:2个,都是int类型。
 65     */
 66     public static int sum(int a,int b) {
 67             //如何实现呢?
 68             //int c = a + b;
 69             //return c;
 70             
 71             //c就是a+b,所以,我可以直接返回a+b
 72             return a + b;
 73     }
 74     
 75 }
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 
 86 
 87 /*
 88     方法的注意事项:
 89         A:方法不调用不执行
 90         B:方法与方法是平级关系,不能嵌套定义
 91         C:方法定义的时候参数之间用逗号隔开
 92         D:方法调用的时候不用在传递数据类型
 93         E:如果方法有明确的返回值,一定要有return带回一个值
 94 */
 95 class FunctionDemo2 {
 96     public static void main(String[] args) {
 97         /*
 98         错误的
 99         public static int sum(int a,int b){
100             return a + b;
101         }
102         */
103         
104         //sum(10,20);
105         
106         //int x = 10;
107         //int y = 20;
108         //错误
109         //sum(int x,int y);
110     }
111     
112     public static int sum(int a,int b){
113         return a + b;
114     }
115 }
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 /*
132     需求:在控制台输出如下的形状
133         *****
134         *****
135         *****
136         *****
137         
138     void类型返回值的方法调用:
139         单独调用
140         输出调用(错误)
141         赋值调用(错误)
142 */
143 class FunctionDemo3 {
144     public static void main(String[] args) {
145         //for循环嵌套输出图形
146         for(int x=0; x<4; x++) {
147             for(int y=0; y<5; y++) {
148                 System.out.print("*");
149             }
150             System.out.println();
151         }
152         System.out.println("--------------");
153         
154         //需求:我要在控制台输出一个6行7列的星形图形
155         for(int x=0; x<6; x++) {
156             for(int y=0; y<7; y++) {
157                 System.out.print("*");
158             }
159             System.out.println();
160         }
161         System.out.println("--------------");
162         
163         //如果需要继续改变,我们就应该考虑使用方法改进。
164         //单独调用
165         pringXing(3,4);
166         System.out.println("--------------");
167         pringXing(6,7);
168         System.out.println("--------------");
169         pringXing(8,9);
170         
171         //输出调用
172         //此处不允许使用 '空' 类型
173         //System.out.println(pringXing(3,4));
174         
175         //赋值调用
176         //非法的表达式开始
177         //void v = pringXing(3,4);
178     }
179     
180     /*
181         写一个什么样子的方法呢?写一个m行n列的代码
182         
183         两个明确:
184             返回值类型:这个时候没有明确的返回值,不写东西还不行,所以,这里记住是void
185             参数列表:int m,int n
186     */
187     public static void pringXing(int m,int n) {
188         for(int x=0; x<m; x++) {
189             for(int y=0; y<n; y++) {
190                 System.out.print("*");
191             }
192             System.out.println();
193         }
194     }
195 }
196 
197 
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211 
212 
213 
214 
215 
216 
217 
218 /*
219     需求:我要求数的和
220     我们的需求不断的发生改变,我们就对应的提供了多个求和的方法。
221     但是呢,他们的名字是不一样的。
222     而我们又要求方法命名做到:见名知意。
223     但是,很明显,现在没有做到。
224     那么,肿么办呢?
225     针对这种情况:方法的功能相同,参数列表不同的情况,为了见名知意,Java允许它们起一样的名字。
226     
227     其实,这种情况有一个专业名词:方法重载。
228     
229     方法重载:
230         在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
231         参数列表不同:
232             A:参数个数不同
233             B:参数类型不同
234 */
235 class FunctionDemo4 {
236     public static void main(String[] args) {
237         //jvm会根据不同的参数去调用不同的功能
238         System.out.println(sum(10,20));
239         System.out.println(sum(10,20,30));
240         System.out.println(sum(10,20,30,40));
241         System.out.println(sum(10.5f,20f));
242     }
243     //需求1:求两个数的和
244     public static int sum(int a,int b) {
245         System.out.println("int");
246         return a + b;
247     }
248     //需求2:求三数的和
249     /*
250     public static int sum1(int a,int b,int c) {
251         return a + b + c;
252     }
253     */
254     public static int sum(int a,int b,int c) {
255         return a + b + c;
256     }
257     //需求3:求四个数的和
258     /*
259     public static int sum2(int a,int b,int c,int d) {
260         return a + b + c + d;
261     }
262     */
263     public static int sum(int a,int b,int c,int d) {
264         return a + b + c + d;
265     }
266     
267     public static float sum(float a,float b) {
268         System.out.println("float");
269         return a + b;
270     }
271 }
272 
273 
274 
275 
276 
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 /*
303     键盘录入两个数据,返回两个数中的较大值
304 */
305 import java.util.Scanner;
306 
307 class FunctionTest {
308     public static void main(String[] args) {
309         //创建键盘录入对象
310         Scanner sc = new Scanner(System.in);
311         
312         System.out.println("请输入第一个数据:");
313         int a = sc.nextInt();
314         
315         System.out.println("请输入第二个数据:");
316         int b = sc.nextInt();
317         
318         int result = getMax(a,b);
319         System.out.println("较大值是:"+result);
320     }
321     /*
322         需求:两个数中的较大值
323         两个明确:
324             返回值类型:int
325             参数列表:int a,int b            
326     */
327     public static int getMax(int a,int b) {
328         //if语句
329         /*
330         if(a > b) {
331             //System.out.println(a);
332             return a;
333         }else {
334             //System.out.println(b);
335             return b;
336         }
337         */
338         //用三元改进
339         //int c = ((a > b)? a: b);
340         //return c;
341         
342         //由于c就是后面的式子
343         return ((a>b)? a : b);
344     }
345 }
346 
347 
348 
349 /*
350     键盘录入两个数据,比较两个数是否相等
351     
352     分析:
353         比较两个数是否相等结果是一个boolean类型。
354 */
355 import java.util.Scanner;
356 class FunctionTest2 {
357     public static void main(String[] args) {
358         //创建键盘录入对象
359         Scanner sc = new Scanner(System.in);
360         System.out.println("请输入第一个数据:");
361         int a = sc.nextInt();
362         System.out.println("请输入第二个数据:");
363         int b = sc.nextInt();
364         boolean flag = compare(a,b);
365         System.out.println(flag);
366     }
367     /*
368         需求:比较两个数是否相等
369         两个明确:
370             返回值类型:boolean
371             参数列表:int a,int b
372     */
373     public static boolean compare(int a,int b) {
374         //if语句的格式2实现
375         /*
376         if(a == b) {
377             return true;
378         }else {
379             return false;
380         }
381         */
382         //三元改进
383         //boolean flag = ((a==b)? true: false);
384         //return flag;
385         //继续改进
386         //return ((a==b)? true: false);
387         //最终版
388         return a == b;
389     }
390 }
391 
392 
393 /*
394     键盘录入三个数据,返回三个数中的最大值
395 */
396 import java.util.Scanner;
397 
398 class FunctionTest3 {
399     public static void main(String[] args) {
400         //创建键盘录入对象
401         Scanner sc = new Scanner(System.in);
402         
403         System.out.println("请输入第一个数据:");
404         int a = sc.nextInt();
405         
406         System.out.println("请输入第二个数据:");
407         int b = sc.nextInt();
408         
409         System.out.println("请输入第三个数据:");
410         int c = sc.nextInt();
411         
412         int max = getMax(a,b,c);
413         System.out.println("三个数据中的最大值是:"+max);
414     }
415     
416     /*
417         需求;返回三个数中的最大值
418         
419         两个明确:
420             返回值类型:int
421             参数列表:int a,int b,int c
422     */
423     public static int getMax(int a,int b,int c) {
424         //if嵌套
425         /*
426         if(a > b) {
427             if(a > c) {
428                 return a;
429             }else {
430                 return c;
431             }
432         }else {
433             if(b > c) {
434                 return b;
435             }else {
436                 return c;
437             }
438         }
439         */
440         
441         //用三元改
442         /*
443         if(a > b) {
444             return (a>c? a: c);
445         }else {
446             return (b>c? b: c);
447         }
448         */
449         
450         //继续改进
451         //return (a>b)? (a>c? a: c): (b>c? b: c);
452         //不建议,写代码一定要注意阅读性强
453         int temp = ((a>b)? a: b);
454         int max = ((temp>c)? temp: c);
455         return max;
456     }
457 }
458 
459 
460 
461 
462 
463 
464 
465 
466 
467 
468 
469 
470 
471 
472 
473 
474 
475 
476 
477 
478 
479 
480 
481 /*
482     键盘录入行数和列数,输出对应的星形
483 */
484 import java.util.Scanner;
485 
486 class FunctionTest4 {
487     public static void main(String[] args) {
488         //创建键盘录入对象
489         Scanner sc = new Scanner(System.in);
490         
491         System.out.println("请输入行数:");
492         int m = sc.nextInt();
493         
494         System.out.println("请输入列数:");
495         int n = sc.nextInt();
496         
497         //void类型的方法调用
498         pringXing(m,n);
499     }
500     
501     /*
502         输出星形
503         
504         两个明确:
505             返回值类型:void
506             参数列表:int m,int n
507     */
508     public static void pringXing(int m,int n) {
509         for(int x=0; x<m; x++) {
510             for(int y=0; y<n; y++) {
511                 System.out.print("*");
512             }
513             System.out.println();
514         }
515     }
516 }
517 
518 
519 
520 
521 
522 
523 
524 
525 /*
526     键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表
527 */
528 import java.util.Scanner;
529 
530 class FunctionTest5 {
531     public static void main(String[] args) {
532         //创建对象
533         Scanner sc = new Scanner(System.in);
534         
535         System.out.println("请输入n的值:(1~9)");
536         int n = sc.nextInt();
537         
538         //调用
539         printNN(n);
540     }
541     
542     /*
543         需求:输出对应的nn乘法表
544         两个明确:
545             返回值类型:void
546             参数列表:int n
547     */
548     public static void printNN(int n) {
549         for(int x=1; x<=n; x++) {
550             for(int y=1; y<=x; y++) {
551                 System.out.print(y+"*"+x+"="+y*x+"\t");
552             }
553             System.out.println();
554         }
555     }
556 }
557 
558 
559 
560 
561 
562 
563 
564 
565 
566 
567 
568 
569 /*
570     比较两个数据是否相等。参数类型分别为
571         两个byte类型,两个short类型,两个int类型,两个long类型,
572     并在main方法中进行测试
573 */
574 class FunctionTest6 {
575     public static void main(String[] args) {
576         //测试
577         byte b1 = 3;
578         byte b2 = 4;
579         System.out.println("byte:"+compare(b1,b2));
580         //测试
581         short s1 = 5;
582         short s2 = 5;
583         System.out.println("short:"+compare(s1,s2));
584         //后面的两个自己测试
585     }
586     //byte类型
587     public static boolean compare(byte a,byte b) {
588         System.out.println("byte");
589         return a == b;
590     }
591     //short类型
592     public static boolean compare(short a,short b) {
593         System.out.println("short");
594         return a == b;
595     }
596     //int类型
597     public static boolean compare(int a,int b) {
598         System.out.println("int");
599         return a == b;
600     }
601     //long类型
602     public static boolean compare(long a,long b) {
603         System.out.println("long");
604         return a == b;
605     }
606 }
View Code

02_数组(一维数组)

  1 /*
  2     数组:存储同一种数据类型的多个元素的容器。
  3     
  4     定义格式:
  5         A:数据类型[] 数组名;
  6         B:数据类型 数组名[];
  7         
  8     举例:
  9         A:int[] a; 定义一个int类型的数组a变量
 10         B:int a[]; 定义一个int类型的a数组变量
 11         
 12     注意:效果可以认为是一样的,都是定义一个int数组,但是念法上有些小区别。推荐使用第一种。
 13     
 14     如何对数组进行初始化呢?
 15         A:何谓初始化呢? 就是为数组开辟内存空间,并为每个数组元素赋予值
 16         B:有几种方式呢?
 17             a:动态初始化 只指定长度,由系统给出初始化值
 18             b:静态初始化 给出初始化值,由系统决定长度
 19             
 20     动态初始化的格式:
 21         数据类型[] 数组名 = new 数据类型[数组长度];
 22         
 23         举例:
 24         int[] arr = new int[3];    
 25         
 26     如何获取数组中的元素呢?
 27         通过:
 28             数组名[索引]
 29             索引其实就是每个元素的编号,从0开始,最大索引是数组的长度-1。
 30 */
 31 class ArrayDemo {
 32     public static void main(String[] args) {
 33         //定义一个数组
 34         //int[] a;
 35         //可能尚未初始化变量a
 36         //System.out.println(a);
 37         
 38         int[] arr = new int[3];
 39         /*
 40             左边:
 41                 int:说明数组中的元素的数据类型是int类型
 42                 []:说明这是一个数组
 43                 arr:是数组的名称
 44                 
 45             右边:
 46                 new:为数组分配内存空间。
 47                 int:说明数组中的元素的数据类型是int类型
 48                 []:说明这是一个数组
 49                 3:数组长度,其实也就是数组中元素的个数
 50         */
 51         
 52         System.out.println(arr); //[I@175078b 地址值。
 53         //我要地址值没有意义啊,我就要数据值,怎么办呢?
 54         //不用担心,java为你考虑到了。
 55         //其实数组中的每个元素都是有编号的,并且是从0开始。最大编号是数组的长度-1。
 56         //用数组名和编号的配合就可以获取数组中的指定编号的元素。这个编号的专业叫法:索引
 57         //通过数组名访问数据的格式是:数组名[索引];
 58         System.out.println(arr[0]);
 59         System.out.println(arr[1]);
 60         System.out.println(arr[2]);
 61     }
 62 }
 63 
 64 
 65 
 66 
 67 
 68 
 69 /*
 70     定义一个数组,输出该数组的名称和数组元素值。
 71     给数组元素赋值,再次输出该数组的名称和数组元素值。
 72 */
 73 class ArrayDemo2 {
 74     public static void main(String[] args) {
 75         //定义一个数组
 76         int[] arr = new int[3];
 77         
 78         //输出数组名称
 79         System.out.println(arr);
 80         //输出数组元素值
 81         System.out.println(arr[0]);
 82         System.out.println(arr[1]);
 83         System.out.println(arr[2]);
 84         System.out.println("----");
 85         
 86         //给数组元素赋值
 87         arr[0] = 100;
 88         arr[2] = 200;
 89         
 90         //输出数组名称
 91         System.out.println(arr);
 92         //输出数组元素值
 93         System.out.println(arr[0]);
 94         System.out.println(arr[1]);
 95         System.out.println(arr[2]);
 96     }
 97 }
 98 
 99 
100 
101 /*
102     定义两个数组,分别输出两个数组各自的数组名及元素值。
103     然后给每个数组的元素重新赋值,再次分别输出两个数组各自的数组名及元素值。
104 */
105 class ArrayDemo3 {
106     public static void main(String[] args) {
107         //定义第一个数组
108         int[] arr = new int[2];
109         //定义第二个数组
110         int[] arr2 = new int[3];
111         
112         //输出数组名和元素值
113         System.out.println(arr);
114         System.out.println(arr[0]);
115         System.out.println(arr[1]);
116         System.out.println("----");
117         
118         System.out.println(arr2);
119         System.out.println(arr2[0]);
120         System.out.println(arr2[1]);
121         System.out.println(arr2[2]);
122         System.out.println("----");
123         
124         //给元素重新赋值
125         arr[1] = 20;
126         
127         arr2[1] = 30;
128         arr2[0] = 40;
129         
130         //输出数组名和元素值
131         System.out.println(arr);
132         System.out.println(arr[0]);
133         System.out.println(arr[1]);
134         System.out.println("----");
135         
136         System.out.println(arr2);
137         System.out.println(arr2[0]);
138         System.out.println(arr2[1]);
139         System.out.println(arr2[2]);
140     }
141 }
142 
143 
144 
145 
146 
147 /*
148     定义第一个数组,定义完毕后,给数组元素赋值。赋值完毕后,在输出数组名称和元素。
149     定义第二个数组,定义完毕后,给数组元素赋值。赋值完毕后,在输出数组名称和元素。
150     定义第三个数组,把第一个数组的地址值赋值给它。(注意类型一致),通过第三个数组的名称去把元素重复赋值。
151     最后,再次输出第一个数组数组名称和元素。
152 */
153 class ArrayDemo4 {
154     public static void main(String[] args) {
155         //定义第一个数组
156         int[] arr = new int[3];
157         arr[0] = 88;
158         arr[1] = 33;
159         arr[2] = 66;
160         System.out.println(arr);
161         System.out.println(arr[0]);
162         System.out.println(arr[1]);
163         System.out.println(arr[2]);
164         System.out.println("----");
165         
166         //定义第二个数组
167         int[] arr2 = new int[3];
168         arr2[0] = 22;
169         arr2[1] = 44;
170         arr2[2] = 55;
171         System.out.println(arr2);
172         System.out.println(arr2[0]);
173         System.out.println(arr2[1]);
174         System.out.println(arr2[2]);
175         System.out.println("----");
176         
177         //定义第三个数组
178         int[] arr3 =  arr;
179         arr3[0] = 100;
180         arr3[1] = 200;
181         System.out.println(arr);
182         System.out.println(arr[0]);
183         System.out.println(arr[1]);
184         System.out.println(arr[2]);
185     }
186 }
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 /*
198     数组的静态初始化:
199         格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
200         简化格式:
201             数据类型[] 数组名 = {元素1,元素2,…};
202         
203         举例:
204             int[] arr = new int[]{1,2,3};
205             
206             简化后:
207             
208             int[] arr = {1,2,3};
209             
210     注意事项:
211         不要同时动态和静态进行。
212         如下格式:
213             int[] arr = new int[3]{1,2,3}; //错误
214 */
215 class ArrayDemo5 {
216     public static void main(String[] args) {
217         //定义数组
218         int[] arr = {1,2,3};
219         
220         System.out.println(arr);
221         System.out.println(arr[0]);
222         System.out.println(arr[1]);
223         System.out.println(arr[2]);
224     }
225 }
226 
227 
228 
229 
230 
231 
232 
233 /*
234     数组操作的两个常见小问题:
235         ArrayIndexOutOfBoundsException:数组索引越界异常
236             原因:你访问了不存在的索引。
237         
238         NullPointerException:空指针异常
239             原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
240             
241         作用:请自己把所有的场景Exception结尾的问题总结一下。以后遇到就记录下来。
242               现象,原因,解决方案。
243 */
244 class ArrayDemo6 {
245     public static void main(String[] args) {
246         //定义数组
247         int[] arr = {1,2,3};
248         
249         //System.out.println(arr[3]);
250     
251         //引用类型的常量:空常量 null
252         arr = null;
253         System.out.println(arr[0]);
254     }
255 }
256 
257 
258 
259 /*
260     数组遍历:就是依次输出数组中的每一个元素。
261     
262     注意:数组提供了一个属性length,用于获取数组的长度。
263           格式:数组名.length
264 */
265 class ArrayTest {
266     public static void main(String[] args) {
267         //定义数组
268         int[] arr = {11,22,33,44,55};
269         
270         //获取每一个元素
271         //如何获取呢?我们知道数组名结合编号(索引)就可以找到数据
272         System.out.println(arr[0]);
273         System.out.println(arr[1]);
274         System.out.println(arr[2]);
275         System.out.println(arr[3]);
276         System.out.println(arr[4]);
277         System.out.println("--------------------");
278         
279         //虽然这种做法可以,但是不是我想要的
280         //我们发现,代码的重复度很高
281         //输出语句,数组名都是相同的,仅仅是索引是变化的
282         //我们就可以使用循环搞定索引值
283         for(int x=0; x<5; x++) {
284             //x=0,1,2,3,4
285             System.out.println(arr[x]);
286         }
287         System.out.println("--------------------");
288         
289         //从0开始我们是明确的,但是为什么到5呢,我们是数了一下数组的个数
290         //继续看下个数组如何遍历
291 int[] arr2={1,2,3,4,5,6,7,8,9,10,11,2,2,3,4,5,7,8,5,3,5,6,8,7,8,5,3,5,6,8,7,8,5,3,5,6,8,7,8,5,    3,5,6,8,11,2,2,3,4,5,7,8,5,3,5,6,8,7,};
292         //而我们在很多时候,数组的元素不能靠数
293         //这个时候,数组就给我们提供了一个属性:length专门用于获取数组的长度
294         //格式:数组名.length 返回数组的长度
295         System.out.println(arr.length);
296         System.out.println(arr2.length);
297         System.out.println("--------------------");
298         
299         //改进第一个程序
300         for(int x=0; x<arr.length; x++) {
301             System.out.println(arr[x]);
302         }
303         System.out.println("--------------------");
304         
305         //我们如果想要对多个数组进行遍历,每个数组的遍历我们都把代码写一遍,麻烦不
306         //麻烦,所以,我们准备用方法改进。
307         //用方法改进后,请调用
308         printArray(arr);
309         System.out.println("--------------------");
310         printArray(arr2);
311         System.out.println("--------------------");
312         printArray2(arr);
313     }
314     
315     /*
316         遍历数组的方法
317         
318         两个明确:
319             返回值类型:void
320             参数列表:int[] arr
321     */
322     public static void printArray(int[] arr) {
323         for(int x=0; x<arr.length; x++) {
324             System.out.println(arr[x]);
325         }
326     }
327     
328     //请看改进版本
329     public static void printArray2(int[] arr) {
330         System.out.print("[");
331         for(int x=0; x<arr.length; x++) {
332             if(x == arr.length-1) { //这是最后一个元素
333                 System.out.println(arr[x]+"]");
334             }else {
335                 System.out.print(arr[x]+", ");
336             }
337         }
338     }
339 }
340 
341 
342 
343 
344 
345 /*
346     数组获取最值(获取数组中的最大值最小值)
347     
348     分析:
349         A:定义一个数组,并对数组的元素进行静态初始化。
350         B:从数组中任意的找一个元素作为参照物(一般取第一个),默认它就是最大值。
351         C:然后遍历其他的元素,依次获取和参照物进行比较,如果大就留下来,如果小,就离开。
352         D:最后参照物里面保存的就是最大值。
353 */
354 class ArrayTest2 {
355     public static void main(String[] args) {
356         //定义一个数组
357         int[] arr = {34,98,10,25,67};
358         
359         //请获取数组中的最大值
360         /*
361         //从数组中任意的找一个元素作为参照物
362         int max = arr[0];
363         //然后遍历其他的元素
364         for(int x=1; x<arr.length; x++) {
365             //依次获取和参照物进行比较,如果大就留下来,如果小,就离开。
366             if(arr[x] > max) {
367                 max = arr[x];
368             }
369         }
370         //最后参照物里面保存的就是最大值。
371         System.out.println("max:"+max);
372         */
373     
374         //把这个代码用方法改进
375         //调用方法
376         int max = getMax(arr);
377         System.out.println("max:"+max);
378             
379         //请获取数组中的最小值
380         int min = getMin(arr);
381         System.out.println("min:"+min);
382     }
383     
384     /*
385         需求:获取数组中的最大值
386         两个明确:
387             返回值类型:int
388             参数列表:int[] arr
389     */
390     public static int getMax(int[] arr) {
391         //从数组中任意的找一个元素作为参照物
392         int max = arr[0];
393         //然后遍历其他的元素
394         for(int x=1; x<arr.length; x++) {
395             //依次获取和参照物进行比较,如果大就留下来,如果小,就离开。
396             if(arr[x] > max) {
397                 max = arr[x];
398             }
399         }
400         //最后参照物里面保存的就是最大值。
401         return max;
402     }
403     
404     public static int getMin(int[] arr) {
405         //从数组中任意的找一个元素作为参照物
406         int min = arr[0];
407         //然后遍历其他的元素
408         for(int x=1; x<arr.length; x++) {
409             //依次获取和参照物进行比较,如果小就留下来,如果大,就离开。
410             if(arr[x] < min) {
411                 min = arr[x];
412             }
413         }
414         //最后参照物里面保存的就是最小值。
415         return min;
416     }
417 }
418 
419 
420 
421 
422 
423 
424 
425 
426 
427 /*
428     数组元素逆序 (就是把元素对调)
429     
430     分析:
431         A:定义一个数组,并进行静态初始化。
432         B:思路
433             把0索引和arr.length-1的数据交换
434             把1索引和arr.length-2的数据交换
435             ...
436             只要做到arr.length/2的时候即可。
437 */
438 class ArrayTest3 {
439     public static void main(String[] args) {
440         //定义一个数组,并进行静态初始化。
441         int[] arr = {12,98,50,34,76};
442         
443         //逆序前
444         System.out.println("逆序前:");
445         printArray(arr);
446         
447         //逆序后
448         System.out.println("逆序后:");
449         //reverse(arr);
450         reverse2(arr);
451         printArray(arr);
452     }
453     
454     /*
455         需求:数组逆序
456         两个明确:
457             返回值类型:void (有人会想到应该返回的是逆序后的数组,但是没必要,因为这两个数组其实是同一个数组)
458             参数列表:int[] arr
459     */
460     public static void reverse(int[] arr) {
461         /*
462         //第一次交换
463         int temp = arr[0];
464         arr[0] = arr[arr.length-1-0];
465         arr[arr.length-1-0] = temp;
466         
467         //第二次交换
468         int temp = arr[1];
469         arr[1] = arr[arr.length-1-1];
470         arr[arr.length-1-1] = temp;
471         
472         //第三次交换
473         int temp = arr[2];
474         arr[2] = arr[arr.length-1-2];
475         arr[arr.length-1-2] = temp;
476         */
477         //用循环改进
478         for(int x=0; x<arr.length/2; x++) {
479             int temp = arr[x];
480             arr[x] = arr[arr.length-1-x];
481             arr[arr.length-1-x] = temp;
482         }
483     }
484     
485     public static void reverse2(int[] arr) {
486         for(int start=0,end=arr.length-1; start<=end; start++,end--) {
487             int temp = arr[start];
488             arr[start] = arr[end];
489             arr[end] = temp;
490         }
491     }
492     
493     //遍历数组
494     public static void printArray(int[] arr) {
495         System.out.print("[");
496         for(int x=0; x<arr.length; x++) {
497             if(x == arr.length-1) { //这是最后一个元素
498                 System.out.println(arr[x]+"]");
499             }else {
500                 System.out.print(arr[x]+", ");
501             }
502         }
503     }
504 }
505 
506 
507 
508 
509 
510 
511 
512 
513 
514 
515 /*
516     数组查表法(根据键盘录入索引,查找对应星期)
517         意思是:String[] strArray = {"星期一","星期二",...};
518 */
519 import java.util.Scanner;
520 
521 class ArrayTest4 {
522     public static void main(String[] args) {
523         //定义一个字符串数组
524         String[] strArray = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
525         
526         //创建键盘录入对象
527         Scanner sc = new Scanner(System.in);
528         
529         System.out.println("请输入一个数据(0-6):");
530         int index = sc.nextInt();
531         
532         System.out.println("你要查找的日期是:"+strArray[index]);
533     }
534 }
535 
536 
537 
538 
539 
540 
541 
542 /*
543     需求:数组元素查找(查找指定元素第一次在数组中出现的索引)
544     分析:
545         A:定义一个数组,并静态初始化。
546         B:写一个功能实现
547             遍历数组,依次获取数组中的每一个元素,和已知的数据进行比较
548             如果相等,就返回当前的索引值。
549 */
550 class ArrayTest5 {
551     public static void main(String[] args) {
552         //定义一个数组,并静态初始化
553         int[] arr = {200,250,38,888,444};
554         //需求:我要查找250在这个数组中第一次出现的索引
555         int index = getIndex(arr,250);
556         System.out.println("250在数组中第一次出现的索引是:"+index);
557         
558         int index2 = getIndex2(arr,250);
559         System.out.println("250在数组中第一次出现的索引是:"+index2);
560         
561         int index3 = getIndex2(arr,2500);
562         System.out.println("2500在数组中第一次出现的索引是:"+index3);
563     }
564     
565     /*
566         需求:查找指定数据在数组中第一次出现的索引
567         两个明确:
568             返回值类型:int
569             参数列表:int[] arr,int value
570     */
571     public static int getIndex(int[] arr,int value) {
572         //遍历数组,依次获取数组中的每一个元素,和已知的数据进行比较
573         for(int x=0; x<arr.length; x++) {
574             if(arr[x] == value) {
575                 //如果相等,就返回当前的索引值。
576                 return x;
577             }
578         }
579         //目前的代码有一个小问题
580         //就是假如我要查找的数据在数组中不存在,那就找不到,找不到,你就对应的返回吗?
581         //所以报错。
582         //只要是判断,就可能是false,所以大家要细心。
583         //如果找不到数据,我们一般返回一个负数即可,而且是返回-1
584         return -1;
585     }
586     public static int getIndex2(int[] arr,int value) {
587         //定义一个索引
588         int index = -1;
589         //有就修改索引值
590         for(int x=0; x<arr.length; x++) {
591             if(arr[x] == value) {
592                 index = x;
593                 break;
594             }
595         }
596         //返回index
597         return index;
598     }
599 }
View Code

小结:

  1 1:方法(掌握)
  2     (1)方法:就是完成特定功能的代码块。
  3         注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。
  4     (2)格式:
  5         修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
  6             方法体语句;
  7             return 返回值;
  8         }
  9 
 10         修饰符:目前就用 public static。后面再详细讲解其他修饰符
 11         返回值类型:就是功能结果的数据类型
 12         方法名:就是起了一个名字,方便我们调用该方法。
 13         参数类型:就是参数的数据类型
 14         参数名:就是变量
 15         参数分类:
 16             实参:实际参与运算的数据
 17             形参:方法上定义的,用于接收实际参数的变量
 18         方法体语句:就是完成功能的代码块
 19         return:结束方法
 20         返回值:就是功能的结果,由return带给调用者。
 21     (3)两个明确:
 22         返回值类型:结果的数据类型
 23         参数列表:参数的个数及对应的数据类型
 24     (4)方法调用
 25         A:有明确返回值的方法
 26             a:单独调用,没有意义
 27             b:输出调用,不是很好,因为我可能需要不结果进行进一步的操作。但是讲课一般我就用了。
 28             c:赋值调用,推荐方案
 29         B:void类型修饰的方法
 30             a:单独调用
 31     (5)案例:
 32         A:求和方案
 33         B:获取两个数中的较大值
 34         C:比较两个数据是否相同
 35         D:获取三个数中的最大值
 36         E:输出m行n列的星形
 37         F:输出nn乘法表
 38     (6)方法的注意事项
 39         A:方法不调用不执行
 40         B:方法之间是平级关系,不能嵌套定义
 41         C:方法定义的时候,参数是用,隔开的
 42         D:方法在调用的时候,不用在传递数据类型
 43         E:如果方法有明确的返回值类型,就必须有return语句返回。
 44     (7)方法重载
 45         在同一个类中,方法名相同,参数列表不同。与返回值无关。
 46         
 47         参数列表不同:
 48             参数的个数不同。
 49             参数的对应的数据类型不同。
 50     (8)方法重载案例
 51         不同的类型的多个同名方法的比较。
 52         
 53 2:数组(掌握)
 54     (1)数组:存储同一种数据类型的多个元素的容器。
 55     (2)特点:每一个元素都有编号,从0开始,最大编号是长度-1 56              编号的专业叫法:索引
 57     (3)定义格式
 58         A:数据类型[] 数组名;
 59         B:数据类型 数组名[];
 60         
 61         推荐是用A方式,B方法就忘了吧。
 62         但是要能看懂
 63     (4)数组的初始化
 64         A:动态初始化
 65             只给长度,系统给出默认值
 66             
 67             举例:int[] arr = new int[3];
 68         B:静态初始化
 69             给出值,系统决定长度
 70             
 71             举例:int[] arr = new int[]{1,2,3};
 72             简化版:int[] arr = {1,2,3};
 73     (5)Java的内存分配
 74         A:栈 存储局部变量
 75         B:堆 存储所有new出来的
 76         C:方法区(面向对象部分详细讲解)
 77         D:本地方法区(系统相关)
 78         E:寄存器(CPU使用)
 79         
 80         注意:
 81             a:局部变量 在方法定义中或者方法声明上定义的变量。
 82             b:栈内存和堆内存的区别
 83                 栈:数据使用完毕,就消失。
 84                 堆:每一个new出来的东西都有地址
 85                     每一个变量都有默认值
 86                         byte,short,int,long 0
 87                         float,double 0.0
 88                         char '\u0000'
 89                         boolean false
 90                         引用类型 null
 91                     数据使用完毕后,在垃圾回收器空闲的时候回收。
 92     (6)数组内存图
 93         A:一个数组
 94         B:二个数组
 95         C:三个数组(两个栈变量指向同一个堆内存)
 96     (7)数组的常见操作
 97         A:遍历
 98             方式1:
 99                 public static void printArray(int[] arr) {
100                     for(int x=0; x<arr.length; x++) {
101                         System.out.println(arr[x]);
102                     }
103                 }
104                 
105             方式2:
106                 public static void printArray(int[] arr) {
107                     System.out.print("[");
108                     for(int x=0; x<arr.length; x++) {
109                         if(x == arr.length-1) {
110                             System.out.println(arr[x]+"]");
111                         }else {
112                             System.out.println(arr[x]+", ");
113                         }
114                     }
115                 }
116         B:最值
117             最大值:
118                 public static int getMax(int[] arr) {
119                     int max = arr[0];
120                     
121                     for(int x=1; x<arr.length; x++) {
122                         if(arr[x] > max) {
123                             max = arr[x];
124                         }
125                     }
126                     
127                     return max;
128                 }
129                 
130             最小值:
131                 public static int getMin(int[] arr) {
132                     int min = arr[0];
133                     
134                     for(int x=1; x<arr.length; x++) {
135                         if(arr[x] < min) {
136                             min = arr[x];
137                         }
138                     }
139                     
140                     return min;
141                 }
142         C:逆序
143             方式1:
144                 public static void reverse(int[] arr) {
145                     for(int x=0; x<arr.length/2; x++) {
146                         int temp = arr[x];
147                         arr[x] = arr[arr.length-1-x];
148                         arr[arr.length-1-x] = temp;
149                     }
150                 }
151                 
152             方式2:
153                 public static void reverse(int[] arr) {
154                     for(int start=0,end=arr.length-1; start<=end; start++,end--) {
155                         int temp = arr[start];
156                         arr[start] = arr[end];
157                         arr[end] = temp;
158                     }
159                 }
160         D:查表
161                 public static String getString(String[] strArray,int index) {
162                     return strArray[index];
163                 }
164         E:基本查找
165             方式1:
166                 public static int getIndex(int[] arr,int value) {
167                     for(int x=0; x<arr.length; x++) {
168                         if(arr[x] == value) {
169                             return x;
170                         }
171                     }
172                     
173                     return -1;
174                 }
175                 
176             方式2:
177                 public static int getIndex(int[] arr,int value) {
178                     int index = -1;
179                 
180                     for(int x=0; x<arr.length; x++) {
181                         if(arr[x] == value) {
182                             index = x;
183                             break;
184                         }
185                     }
186                     
187                     return index;
188                 }
View Code

猜你喜欢

转载自www.cnblogs.com/961013-yu/p/9497263.html