2018年8月6日筆記(迴圈結構、流程控制、陣列、記憶體初講)
複習:
1. 運算子
算術:
% - 取餘 - 注意結果的正負號
++/--在變數之前需要先自增後運算;在變數之後先運算後自增;byte/short/char參與運算
賦值:
除了=,其他的符號都要求變數先有值才能使用
byte/short/char可以參與賦值運算
不允許連等定義但是允許連等賦值
比較:
不允許用比較運算子表示一個連續的範圍 --- 3 < n < 5
邏輯:
^:相同為假不同為真
&&和||的短路特性
位:
針對整數的補碼進行運算
交換值的方式:追尾法、加減法、異或法
三元:
執行順序:先執行邏輯值,如果邏輯值為true則執行表示式1;反之執行表示式2
三元表示式中的兩個式子的結果型別必須能夠轉化
流程控制
順序結構:指程式碼從上到下從左到右依次編譯執行
分支結構
判斷結構
if(){}
if(){}else {}
if(){}else if(){}
練習:輸入一個數字,然後輸出這個數字表示星期幾
3 -> 星期三
選擇結構
switch(選擇){
case 選項1:Code1;break;
case 選項2:Code2;break;
...
}
switch()中需要一個選項,選項只能是byte/short/char/int,從JDK1.7開始,允許使用String
如果每一個case之後都有break,case順序不影響結果
如果有一個或者多個case之後沒有break,那麼這個時候case之間的順序影響結果
練習:輸入兩個數字以及一個符號,輸出這兩個數字在這個符號下運算產生的結果
5 9 + -> 14
switch(){
case “+”:...
case “-”:...
}
練習:輸入三個數字表示年月日,輸出這一天在這一年是第幾天
2012 3 5 ---> 65
2014 3 5 ---> 64
需要判斷平年閏年:逢百整除400;不逢百整除4
2012 % 4 == 0 --- true
2100 % 400 == 0 --- false
迴圈結構
用於完成一些相同或者相似的重複的操作
while(邏輯值){
Code;
}
執行順序:
練習:
1. 求1-100以內所有的奇數的和 --- i = 1; i += 2;
2. 列印100以內能被3整除而不能被7整除的數字 --- 先獲取3的倍數 int i = 0; i += 3;
3. 輸入一個數字,輸出這個數字是一個幾位數
4. 輸入一個數字,輸出這個數字的所有的因數 --- 從1開始,逐個數字取餘這個輸入的數字,看是否能夠整除
20:1 2 4 5 10 20
定義一個迴圈,需要三個要素:定義一個變數來控制次數,利用判斷條件決定迴圈結束;在迴圈過程中需要改變變數
do{
Code;
} while(邏輯值);
注意:無論條件是否滿足,do-while的迴圈體必然至少執行一次。
for(定義迴圈變數; 控制條件; 改變迴圈變數){
Code;
}
習慣上如果變化不規律或者次數不確定一般使用while迴圈;如果變化規律或者是次數固定,一般是用for迴圈
求1-10的和 --- for迴圈
int sum = 0;
for(int i = 1; i <= 10; i++){
sum += i;
}
從控制檯獲取一個大於10的奇數
Scanner s = new Scanner(System.in);
int n = s.nextInt();
// 使用while迴圈
while(n < 10 || n % 2 == 0){
n = s.nextInt();
}
// 使用for迴圈
for(; n < 10 || n % 2 == 0; n = s.nextInt()){
}
練習:列印九九乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
。。。
練習:
百錢百雞 --- 3文錢1只公雞,2文錢1只母雞,1文錢3只小雞;100文錢如何買恰好100只雞? --- 先定義一個迴圈表示公雞,巢狀一個迴圈表示母雞,計算小雞的個數,根據各種雞的個數來計算錢數是否為100
break和continue
break:用於選擇結構和迴圈結構,表示結束當前的一層結構
continue:只能用於迴圈結構,表示跳過本次迴圈繼續下次迴圈(只能跳過一層迴圈)
擴充套件作業:一個迴圈列印九九乘法表
陣列
儲存同一型別的多個數據的容器---大小是固定的
陣列會對放入其中的資料(元素)進行編號,編號是從0開始的 - 下標
陣列的容量 --- 長度
定義格式
資料型別[] 陣列名 = new 資料型別[長度];
int[] arr = new int[5]; --- 表示定義一個能儲存5個整型元素的陣列
資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,元素3......};
int[] arr = new int[]{1,2,5,6,8,9,6};
int[] arr={1,5,8,6,3};
給定了陣列的資料,也確定了陣列的長度。
記憶體
Java將所佔用的記憶體劃分為了5塊:棧記憶體、堆記憶體、方法區、本地方法棧、PC計數器(暫存器)
棧記憶體
用於儲存變數的。變數在棧記憶體使用完成之後會立即移除出棧記憶體。
堆記憶體
用於儲存物件(陣列是一種特殊的物件)的。元素在存入堆記憶體中之後會自動的賦予預設值:
byte/short/int - 0 long - 0L float - 0.0f
double - 0.0 char - ‘\u0000’ boolean - false,其他型別的預設值都是null。
物件在用完之後是在不確定的某個時刻被回收。
預習: logab = logcb/logca logabn = nlogab logab = loga + logb