標籤:就是 利用 strong nbsp 複雜度 操作 多個 sub 標記
接著前幾天的分支結構的回顧,今天主要回顧一下迴圈結構和數組方面的一些知識吧。 練習:輸入一個數字,然後輸出這個數字表示星期幾switch(選擇){ case 選項1:Code1;break; case 選項2:Code2;break; ……} 1.switch() 中需要一個選項,選項只能是 byte/short/char/int,從JDK 1.7開始,允許使用 Stringcase 順序不影響結果2.如果有一個或者多個 case 之後沒有 break,那麼這個時候 case 之間的順序影響結果 練習:輸入兩個數字以及一個符號,輸出這兩個數字在這個符號下運算產生的結果5 9 + ->14練習:輸入三個數字表示年月日,輸出這一天在這一年時第幾天2012 3 5 ------>652014 3 5 ------>64需要判斷平年閏年:逢百整除 400;不逢百整除 42012 % 4 = 02100 % 400 = 0 --- false
迴圈結構:用於完成一些相同或者相似的重複操作 while(邏輯值){ Code;} 練習:1.求 1-100 以內所有的奇數的和 --- i=1; i+=2;2.列印 100 以內能被 3 整除而不能被 7 整除的數字 int i = 0; i +=3;3.輸入一個數字,輸出這個數字是一個幾位元。*4.輸入一個數字,輸出這個數位所有因數。 --- 從 1 開始,逐個數字取餘這個輸入的數字,看是否能夠整除 * 20:1 2 4 5 10 20 定義一個迴圈,需要三個要素:定義一個變數來控制次數,利用判斷條件決定迴圈結束;在迴圈過程中需要改變變數 do{ Code; //先執行代碼塊,再執行邏輯值,如果邏輯值為 true,轉過頭來繼續執行代碼塊;如果為 false,就執行接下來的程式。}whie(邏輯值); 注意:無論條件是否滿足,do-while 的迴圈體必然至少執行一次。 2 7
for(){定義迴圈變數; 控制條件; 改變迴圈變數){ // 1 4 5 6 Code;}注意:對於 for 迴圈而言,如果第二部分的控制條件沒有寫,那麼預設是 true,這個時候就成了一個死迴圈。習慣上如果變化不規律或者次數不確定一般使用while(比如,從控制台擷取一個大於 10 的奇數,有可能輸入很多次,就是用這個) while(n < 10 || n % 2 ==0){ n =s.nextInt();}for(; n < 10 || n % 2 == 0; n = s.nextInt())
//求 1-50 的和int sum = 0;//對於 for 迴圈而言,如果第二部分的控制條件沒有寫,那麼預設是 true,這個時候就成了一個死迴圈。for(int i = 1; i <= 50; i++){sum += i;i++;}System.out.println(sum);
練習:百錢百雞 --- 3 文錢 1隻公雞, 2 文錢 1 只 母雞,1 文錢 3 只小雞;100 文錢如何買恰好 100 只雞? --- 先定義一個迴圈表示公雞,嵌套一個迴圈表示母雞,計算小雞的個數,根據各種雞的個數來計算錢數是否為 100
/**練習:百錢百雞 --- 3 文錢 1隻公雞, 2 文錢 1 只 母雞,1 文錢 3 只小雞;100 文錢如何買恰好 100 只雞? --- 先定義一個迴圈表示公雞,嵌套一個迴圈表示母雞,計算小雞的個數,根據各種雞的個數來計算錢數是否為 100*/import java.util.Scanner;public class Demo2d{public static void main(String[] args){Scanner s = new Scanner(System.in);for(int i = 1 ; i <= 33 ; i++) for(int j = 1; j <= 50; j++){int k = 100 - i - jif(k % 3 == 0 && 3*i+2*j+k/3 == 100){System.out.print(i+","+j+","+k+"\t");} }}}
break 和 continuebreak:用於選擇結構和迴圈結構,表示結束當前的一層結構continue:只能用於迴圈結構,表示跳過本次迴圈繼續下次迴圈, 擴充作業:一個迴圈列印九九乘法表
for(int i = 1; i <= 9; i++){for(int j = 1; j <= i; j++){//if(i*j >= 10){//System.out.print(i+"*"+j+"="+i*j+" ");//}else{//System.out.print(i+"*"+j+"="+i*j+" ");//}System.out.print(i+"*"+j+"="+i*j+"\t");//使用定位字元 \t,可以不用自己特意去控制了,自動左邊對齊了。}System.out.println();}
數組儲存同一類型的多個資料的容器 --- 大小固定的數組會對放入其中的資料進行編號,編號是從 0 開始的 --- 下標(比數組的長度少一個)數組的容量 --- 長度
定義格式資料類型[] 數組名 = new 資料類型[長度];int arr = new int[5]; 表示定義一個能儲存 5 個整型元素的數組arr[3] = 10; arr[5] = 7; // ArrayIndexOutOfBoundsException ---數組下標越界異常
記憶體Java 將所佔用的記憶體劃分為了 5 塊:棧記憶體(*)、堆記憶體(*)、方法區、本地方法棧(涉及到塊語言的問題)、PC 計數器(寄存器,跟硬體相關)
棧記憶體用於儲存變數的,變數在棧記憶體中使用完成之後會立即移除出棧記憶體,有種卸磨殺驢的樣子。只要遇到 new ,就會在堆中開闢一塊空間(從 0-n劃分),有地址。對於裡面的資料先預設一個值(0),當賦值後改變值。
堆記憶體用於儲存物件(數組是一種特殊的對象)的。元素在存入堆記憶體中之後會自動的賦予預設值:byte/short/int -0 long -0L float -0.0f double -0.0 char -‘\u0000‘ boolean -false,其他類型的預設值都是null。 [(表示資料類型 --- [ 表示數組) I(如果這是一個數組,那麼是這一部分表示數組中的元素類型 --- I 表示 Int) @(標記符號,表示後邊是一個地址) 15db9742(可以認為表示一個地址,實際上是這個對象的雜湊碼的十六進位形式)對象在用完之後是在不確定的某個時刻被回收。 明天內容: 數組 定義 記憶體 應用 遍曆、排序、尋找、反轉、複製 時間/空間複雜度 --- 數列(等差數列求和)、指數、對數(對數公式 logab=logcb/logca,logabn=nlogab logab=1/logba) 二維數組
Java 基礎 | 迴圈結構和數組