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人計數。