hello 你们好java
跳转语句:三个:c++
break;跳出当前循环体数组
continue;跳过本次循环,continue;下代码不执行直接进行下一次循环性能
ruturn;结束当前方法;blog
public static void main(String[] args) { Test1 .xunHuanDemo(); //.array1(); //.array2(); //.suanfa1(); } public static void xunHuanDemo() { int i=0; for(i=0;i<5;i++) { if(i==3) { continue; } } while(i<5) { i++; if(3==i) { System.out.println("此时i的值 : "+i); //continue; break; //return; } System.out.println("第"+i+"个数是: "+i); } } }
咱们把while循环体里边的if(3==i)里的三个语句挨个注释执行,咱们就会发现这三个语句的特色。游戏
2.java中数组的问题数学
数组的定义for循环
public static void main(String[] args) { Test1 //.xunHuanDemo(); .array1(); //.array2(); //.suanfa1(); } public static void array1() { int arr1[]=new int[10]; arr1[4]=1; int a,c=0; a=arr1[4]; System.out.println("a的值"+a+"arr1[4]的值是"+arr1[4]); int arr2[]={1,2,3,4,5,6,7,8,9,10}; for(int b:arr2) { c++; System.out.println("arr2["+c+"]的值为 : "+b); } for(c=0;c<arr1.lengch;c++) { System.out.println("arr1["+c+"]的值为 : "+arr1[c]); } }
在这个代码中:咱们用了两种方式定义数组class
第一种:数据类型 数组名称[]=new 数据类型[n] ;代码中咱们就定义了一个长度为10的int类型的数组arr1,初始值所有为0(默认)。而后咱们给arr[4]赋值1,并能够把arr[4]的值赋值给a,咱们用for-each语句循环打印数组arr,发现除了咱们赋值为1的arr[4]外其他都为0,也就证实了咱们的java数组所有默认为0的事实。循环
第二种:数据类型 数组名称[]={初始值1,初始值2}。代码中咱们顶一个了个数组arr2,直接赋给初始值1-10,java会本身计算出数组的长度。咱们用arr2.length的语法获取他的长度。咱们用for循环语句打印发现咱们的长度是正确的。
for-each循环语句。对顺序数组的遍历很是好用。比for循环语句性能更高。数组遍历从头开始。
在java中也有二维 三维 多维数组的概念:
public static void array2() { int arr3[][]=new int[3][4]; System.out.println(arr3.lengch); int a1[]={1,2,3,4}; int a2[]={5,6,7,8}; int a3[]={9,10,11,12}; int arr4[][]={a1,a2,a3}; for(int i=0;i<arr4.lengch;i++) { for(int j=0;j<arr4[i].lengch;j++) { System.out.print("arr4["+i+"]["+j+"]的值为"+arr4[i][j]+" \t"); } System.out.println(); } for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { System.out.print("arr3["+i+"]["+j+"]的值为"+arr3[i][j]+"\t"); } System.out.println(); } }
咱们这个方法中就实现了两种二维数组的定义:
第一种:数据类型 数组名称[][]=new 数据类型[][];在代码中咱们定义了一个三行四列的int类型的数组arr3。一样咱们用for循环打印发现初始值为0.。相信你们对arr3.length的值有疑问。为啥3*4=12个值,他的长度只有三。由于length计算的都是第一个表示数组的长度。好比arr3[3][4]中arr3[3]就能够表示数组,因此就是他的长度3.而咱们二层for循环中arr3[i].length的意思就是arr3[i]这已经表示一个数啦,意思是第几行。再点length就是这一行的长度4.
第二种:就是为了让咱们理解点length的长度问题。arr4中初始化了三个长度为4的数组a1,a2,a3。
咱们来作几道关于数组的题目:
第一题:比赛计分问题
某比赛,有N位评委为选手打分,分数在1到100之间.选手最后得分为去掉一个最高分,去掉一个最低分以后的平均分.请应用程序实现。
public static void dafen(double fen[]) { double max=fen[0]; double min=fen[0]; double sum=0; for(double a:fen) { if(max<a) { max=a; } if(min>a) { min=a; } sum+=a; } double avg=(sum-max-min)/(fen.lengch-2); System.out.println("平均分是 :"+avg); }
问题分析,N个分数。去除最大最小。剩下加起来,求平均值。这就要求咱们所有分数得遍历一遍,正好在遍历的时候求出最大和最小值,而后把全部值加起来。而后总分数去除最大最小,除以剩下的打分人数就能够获得平均值啦。这里咱们把方法写成带参数,这样咱们就能够随便往里边传N个参数。不须要去方法里改变代码。体现了封装的稳定性。
第二个问题: 农夫与白菜
农夫沿着自家院子种植了一圈大白菜,到了秋天,农夫收获白菜的时候,他计划这样收割:从第一颗开始,数到三就砍掉当前的这颗白菜.请您打印出被砍掉白菜的序号;
public static void baicai() { //白菜的围成一圈的顺序编号 int baic[]={1,2,3,4,5,6,7,8,9,10,11,12}; //定义一个计数器记录砍掉的白菜数。 int sum=0; //定义计数每喊三声砍一颗; int j=0; //砍掉的白菜数小于总的白菜数就一直循环砍 while(sum<baic.lengch) { for(int i=0;i<baic.lengch;i++) { //查看标记,该白菜是否被砍。 if(baic[i]!=0) { j++; if(j==3) { //把砍掉的白菜打印输出 System.out.print(baic[i]+","); //给砍掉的坐上标记,再也不循环这个白菜 baic[i]=0; //重新喊数 j=0; //砍得数量加一 sum++; } } } } }
问题分析,白菜围满一圈院子,没喊三声砍一颗白菜,砍完便少一颗,把每一次砍得打印出来。而且再砍以前看一下标识是否已经被砍。
该代码注释十分清晰。但数组是写死的,你们能够改为传参方法更好。
问题三:约瑟夫问题
这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事: 15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其他的人才能幸免于难,因而想了一个办法:30我的围成一圆圈,从第一我的开始依次报数,每数到第九我的就将他扔入大海,如此循环进行直到仅余15我的为止。问怎样排法,才能使每次投入大海的都是非教徒。
public static void suanfa1() { int arr1[]=new int[30]; arr1[0]=1; int count=0; for(int i=0,j=1;i<30;i++,j++) { if(arr1[i] == 1) { j--; continue; } if(9==j) { arr1[i]=1; j=0; count++; if(15==count) { break; } } if(29==i) { i=-1; } } int count1=0; String msg=""; for(int a:arr1) { count1++; msg=(a==0)?"信徒":"非信徒"; System.out.println("第"+count1+"我的是 : "+msg); } }
这个和那个砍白菜差很少,可是这个排列就存在一点问题,那就是第一个站的是信徒仍是非信徒两种状况。咱们一样根据每9人下海一我的。一轮回设置一个计数器来存取当前数到第几个。定义一个下海总数,到15就退出循环。某人下海后就标记下海,再次循环到该人不作9人计数。