20145318 《Java程序設計》第2周學習總結
教材學習內容總結
- short,2字節;int,4字節;long,8字節;byte,1字節;float,4字節;double,8字節;char,2字節;boolean只有true和false。
- 基本類型:整型(short、int、long) 、字節(byte) 、浮點型(float、double) 、字符(char)、布爾(boolean,只有true和false,且不能與其他類型運算)。
- 常量:整數可以用二進制(b),八進制(o)、十進制、十六進制(x)。
- 小數默認為double型,只有其后加f或F才是浮點型,double型精度更高。
- 類型轉換:如果表達式中包括不同類型,則以精度最高的類型計算;可強制轉換,如sqrt的類型是double型,如果要直接引用即將int強制轉換為double型。
- break 可以離開當前for、switch、while等循環語句,並執行循環外下一個語句。
- continue 用於循環語句中,不執行其后的語句,回到循環開始進行下一次循環,不離開循環。
- 除算術運算符、賦值運算符、比較運算符、邏輯運算符之前常用外,位運算符包括<<、>>、>>>、&、|、^、~,只能對二進制運算,有時用位運算符能簡化程序,但是可讀性不高,推薦學習但是實際編程不推薦。
- goto可以用break/continue代替,之前用goto語句用的很順手,但是實際編程中不建議使用goto,在此總結一下goto語句的優缺點。優點:可以快速的跳出多重循環,方便的去到我所想要執行的語句處。缺點:雖然可以用goto代替ifelse等語句,但是它會使程序攪在一起,像一團亂了的毛線球,不容易閱讀,也就是所謂的破壞語言的結構性。總結來說,goto語句一般不用,盡量少用,特別是對於初學者,goto可能會在某些方面簡化程序,但是終究不是正解。
代碼調試中的問題和解決過程
打印九九乘法表
/*
需求:打印九九乘法表如下。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
思路:正三角形狀可用改變for循環中間的表達式實現,注意到每一行前面的乘數依次增加,后數不變,可用for循環嵌套實現。
針對得數位數不同,可用制表符\t使格式整齊。兩數之積直接用y*x表示。
*/
class MultiplicationTable
{
public static void main(String[] args)
{
int x,y;
for(x=1;x<=9;x++)
{
for(y=1;y<=x;y++)
{ //兩種方法都可以打印,注意printf和print的區別
System.out.printf("%d*%d=%d\t",y,x,y*x); /* 此處用print不行。若不用"%d\t",可以用"%2d " */
//System.out.print(y+"*"+x+"="+y*x+"\t"); //制表符:\t,使每列對齊。
}
System.out.println();
}
}
}
冒泡排序
/*
需求:冒泡排序。
思路:冒泡排序即第一個元素與第二個元素進行比較,大者向后移動,第二個元素與第三個元素比較,大者向后移動,一輪比較完成時,最大的元素就在最后面,
此時開始第二輪比較,同樣是第一個與第二個比較,但是此時最后一個元素已經不需要比較了,依次類推,最后一輪第一個元素和第二個元素比較完成即排序完成。
交換數值:新定義函數
*/
class BubbleSort
{
public static void main(String[] args)
{
int[] arr={4,2,9,6,8,3,1,5,7};
printArray(arr);
bubbleSort(arr);
printArray(arr);
}
public static void bubbleSort(int[] arr)
{
for(int i=0;i<arr.length;i++)
for(int j=0;j<arr.length-i-1;j++)
//注意:-i是因為依次比較i次后后面的i個數已經確定,不需要再比較;
//-1是因為避免下一行arr[j+1]越界。
if(arr[j]>arr[j+1])//注意比較的是相鄰兩元素。
{
sort(arr,j,j+1);
}
}
public static void printArray(int[] arr)//注意兩個函數包含在一個類中
{
System.out.printf("[");//先打印一個[
for(int i=0;i<arr.length;i++)//數組名.length表示數組長度
{
if(i<arr.length-1)
System.out.printf("%d,",arr[i]);//若非最后一個元素,打印"%d,"
else
System.out.printf("%d]",arr[i]);//若是最后一個元素,打印"%d]"
}
System.out.printf("\n");//最后在循環外換行
}
public static void sort(int[] arr,int a,int b)
//int 三個系數,一個數組兩個代表數組的標號,不能直接int 兩個數
{
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
結果

代碼托管


其他(感悟、思考等,可選)
-
初學者學習Java這樣的操作性課程需要大量的練習,只有在編寫代碼的過程中才有所提高,但是我不提倡遇到問題遇到錯誤就去問同學問老師,我認為更好的解決辦法是自己查錯和百度,經過努力的糾錯過程才會印象更加深刻,特別是針對稍微復雜一點的循環嵌套,有很多需要注意的細節,比如<=和<,都需要考慮清楚。
-
另外寫注釋的習慣也要逐步培養,養每段代碼class前有需求和思路分析,代碼中復雜的部分或者復習時需要注意的部分應該有所標記。
-
之后會嘗試IDEA進行編寫。
-
針對老師提出的問題應該盡快有回復或者改正。
學習進度條

