循環(huán)
循環(huán)語句功能: 在某些條件滿足的情況下,反復執(zhí)行特定代碼的功能
循環(huán)語句的四個組成部分
初始化部分(init_statement)
循環(huán)條件部分(test_exp)
循環(huán)體部分(body_statement)
迭代部分(alter_statement)
循環(huán)語句分類: for 循環(huán)、while 循環(huán)、do/while 循環(huán)
for 循環(huán)語句
語法格式
for (初始化表達式①; 布爾值測試表達式②; 更改表達式){
??語句或語句塊③;
}
1. 從1循環(huán)到150并在每行打印一個值,另外在 每個3的倍數(shù)行上打印出“foo”,在每個5的倍數(shù)行上打印“biz”,在每個7 的倍數(shù)行上打印輸出“baz” 。2. 打印1~100之間所有奇數(shù)的和3. 打印1~100之間所有是7的倍數(shù)的整數(shù)的個數(shù)及總和(體會設置計數(shù) 器的思想)4. 輸出所有的水仙花數(shù),所謂水仙花數(shù)是指一個3位數(shù),其各個位 上數(shù)字立方和等于其本身。 例如: 153 = 111 + 333 + 555
while 循環(huán)語句
while( 布爾值測試表達式){
??語句或語句塊; [更改語句;]
}
do-while 循環(huán)語句
do{
??語句或語句塊; [更改語句;]
}while(布爾值測試表達式);
5. 求1到100之間所有偶數(shù)的和。用for和while語句分別完成.
嵌套循環(huán)
將一個循環(huán)放在另一個循環(huán)體內,就形成了嵌套循環(huán)。其中, for ,while ,do…while均可以作為外層循環(huán)和內層循環(huán)。
實質上,嵌套循環(huán)就是把內層循環(huán)當成外層循環(huán)的循環(huán)體。當只有內層循環(huán)的循 環(huán)條件為false時,才會完全跳出內層循環(huán),才可結束外層的當次循環(huán),開始下一 次的循環(huán)。
設外層循環(huán)次數(shù)為m次,內層為n次,則內層循環(huán)體實際上需要執(zhí)行m*n=mn次。
例題:1)九九乘法表 2)1—100之間的所有質數(shù)
break語句用于終止某個語句塊的執(zhí)行
break終止當前所在的循環(huán)
continue語句用于跳過某個循環(huán)語句塊的一次執(zhí)行
continue語句出現(xiàn)在多層嵌套的循環(huán)語句體中時,可以通過標簽指明要跳過的是哪一層循環(huán)
return:并非專門用于結束循環(huán)的,它的功能是結束一個方法。當一 個方法執(zhí)行到一個return語句時,這個方法將被結束。 與break和continue不同的是,return直接結束整個方法,不管這個 return處于多少層循環(huán)之內
數(shù)組
一維數(shù)組的聲明方式: type var[] 或 type[] var
例如:
int a[];
int[] a1;
double b[];
Mydate[] c; //對象數(shù)組
動態(tài)初始化:數(shù)組聲明且為數(shù)組元素分配空間與賦值的操作分開進行
int[] arr = new int[3];
arr[0] = 3;
arr[1] = 9;
arr[2] = 8;
靜態(tài)初始化:在定義數(shù)組的同時就為數(shù)組元素分配空間并賦值。
int a[] = new int[]{ 3, 9, 8};
int[] a = {3,9,8};
數(shù)組元素的引用
定義并用運算符new為之分配空間后,才可以引用數(shù)組中的每個元素;
數(shù)組元素的引用方式:數(shù)組名[數(shù)組元素下標]
數(shù)組元素下標可以是整型常量或整型表達式。如a[3] , b[i] , c[6*i];
數(shù)組元素下標從0開始;長度為n的數(shù)組合法下標取值范圍: 0 —>n-1;如int a[]=new int[3]; 可引用的數(shù)組元素為a[0]、a[1]、a[2]
每個數(shù)組都有一個屬性length指明它的長度,例如:a.length 指明數(shù)組a的長度(元素 個數(shù))
數(shù)組一旦初始化,其長度是不可變的
多維數(shù)組
二維數(shù)組[][]:數(shù)組中的數(shù)組
int[][] arr = new int[2][3]; //定義了名稱為arr的二維數(shù)組里有三個一維數(shù)組,每一個一維數(shù)組中有兩個元素。
int[][] arr = new int[][]{{3,4,2},{2,6},{9,0,4,6}}; //第三個一維數(shù)組的長度是arr[2].length;
java重點多維數(shù)組不必都是規(guī)則矩陣形式。
int[]x,y[];是特殊寫法,x是一維數(shù)組,y是二維數(shù)組。
數(shù)組中涉及的常見算法
1.求數(shù)組元素的最大值、最小值、總和、平均數(shù)
2.數(shù)組的復制、反轉
3.數(shù)組元素的排序
數(shù)組排序 ??
插入排序 ? 直接插入排序、折半插入排序、Shell排序
交換排序 ? 冒泡排序、快速排序(或分區(qū)交換排序)
選擇排序 ? 簡單選擇排序、堆排序
歸并排序
基數(shù)排序
冒泡排序 排序思想: 相鄰兩元素進行比較,如有需要則進行交換,每完成一次循環(huán)就將最大 元素排在最后(如從小到大排序),下一次循環(huán)是將其它的數(shù)進行類似 操作。
作業(yè)
使用簡單數(shù)組 (1)創(chuàng)建一個名為TestArray的類,在main()方法中聲明array1和array2兩個變量,他們是 int[]類型的數(shù)組。 (2)使用大括號{},把array1初始化為8個素數(shù):2,3,5,7,11,13,17,19。 (3)顯示array1的內容。 (4)賦值array2變量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。打印出array1。 思考:array1和array2是什么關系? 拓展:修改題目,實現(xiàn)array2對array1數(shù)組的復制
public class jiujiu {
public static void main(String[] args){
//九九乘法表
for(int i = 1; i <= 9; i++){
for(int j = 1; j <=i; j++){
System.out.print(i + "*" + j + "=" + (i*j)+"\t");
}
System.out.println();
}
}
}
public class ZhiShu {
public static void main(String[] args){
int cou = 0;
for(int i = 1; i <= 100; i++){
int count = 0;
for(int j = 1; j <= i; j++){
if(i%j == 0){
count++;
}}
if(count == 2){
System.out.println(i);
cou++;
}
}
System.out.println("質數(shù)的數(shù)量是"+cou);
}
}
public static void main(String[] args){
//輸出所有的水仙花數(shù),所謂水仙花數(shù)是指一個3位數(shù),其各個位上數(shù)字立方和等于其本身。
//例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
int count =0;
System.out.print("水仙花數(shù)有:");
for(int i = 100; i <1000; i++){
//數(shù)字x
//百位數(shù)是x/100
//十位(x - a*100)/10;
//個位x%10;
//水仙花 x=(x/100)*(x/100)*(x/100)+((x - a*100)/10)*((x - a*100)/10)*((x - a*100)/10)+(x%10)*(x%10)*(x%10)
int a = i/100;
int b = (i - a*100)/10;
int c = i%10;
//System.out.println(a+""+b+c);
if(i == a*a*a + b*b*b + c*c*c){
System.out.print(i+" ");
count++;
}
}
System.out.println("\n"+"水仙花數(shù)的個數(shù)是:"+count);
}
public class Arr2 {
public static void main(String[] args){
//test();
// copy();
// rev();
//pao();
TestArray();
}
public static void test(){
int[] arr = {4, 2, 7, 1, 3, 5};
//求數(shù)組元素的最大值、最小值、總和、平均數(shù)
int max = arr[0];
int min = arr[0];
int sum = 0;
for(int i = 0; i <arr.length; i++){
if(max < arr[i]){
max = arr[i];
}
if(min > arr[i]){
min = arr[i];
}
sum += arr[i];
}
int avg = sum/(arr.length+1);
System.out.println(max+" ,"+min+" ,"+sum+" ,"+avg);
}
//復制
public static void copy(){
int[] arr = {4, 2, 7, 1, 3, 5};
int[] copy = new int[arr.length];
for(int i = 0; i < arr.length; i++){
copy[i] = arr[i];
}
System.out.println(copy[2]);
}
//反轉
public static void rev(){
int[] arr = {4, 2, 7, 1, 3, 5};
int[] rev = new int[arr.length];
int j = 0;
for(int i = arr.length - 1; i >= 0; i--){
rev[j] = arr[i];
j++;
}
for(int i = 0; i < rev.length; i++){
System.out.println(rev[i]);
}
}
//冒泡
public static void pao(){
int[] arr = {4, 2, 17, 12, 322, 51};
int cup = 0;
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
cup = arr[j];
arr[j] = arr[j+1];
arr[j+1] = cup;
}
}
}
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
public static void TestArray(){
//創(chuàng)建一個名為TestArray的類,聲明array1和array2兩個變量,他們是int[]類型的數(shù)組。
//使用大括號{},把array1初始化為8個素數(shù):2,3,5,7,11,13,17,19。
//顯示array1的內容
//)賦值array2變量等于array1,修改array2中的偶索引元素,使其等于索引值(如 array[0] = 0,array[2] = 2)。打印出array1
int[] array1 = {2, 3, 5, 7, 11, 13, 17, 19};
int[] array2 = new int[]{};
for(int i = 0; i < array1.length; i++){
System.out.println(array1[i]);
}
System.out.println();
array2 = array1;
for(int i = 0; i < array2.length; i++){
if(i == 0){
array2[0] = 0;
}
if(i % 2 == 0){
array2[i] = i;
}
}
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
}
}
//注??:數(shù)組排序提到了插入排序 、交換排序、選擇排序 、歸并排序 、基數(shù)排序,但只講了交換排序中的冒泡排序,學完課程后建議搜索后深入了解。??