- 首先,C/C++塊作用域在JAVA依然適用,但是不允許在嵌套的塊中重複定義變量
while(...) { int n = 10; // ... for(...) { // ... int n = 1; // C/C++可以,內層變量將覆蓋外層,但JAVA不允許 // ... } }
- 可以在作用域塊前設置標籤,用break跳出內層循環
public class Main { public static void main(String[] args) { int i = 0, j = 0, k = 0; label: for(i = 0; i < 5; ++i) { for(j = 0; j < 10; ++j) { for(k = 0; k < 4; ++k) { if(i*j*k == 20) break label; } } } // 跳至這裏 System.out.println(i+" "+j+" "+k); // 2 5 2 } }
- for each循環,和C++一樣,不過不能使用auto
public class Main { public static void main(String[] args) { int a[] = {1,2,3,4,5}; //類似C/C++的初始化方法 for(int x : a) System.out.println(x); } }
---------------------------------------------------------------------------------------------------------------------------
數組
- 聲明一維數組有2種方法,int a[] 和 int[] b
- 可以把數組名當做C++的指針
- 使用new來創建數組
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int[] a = new int[n]; //n可爲整型變量或整型常量 for(int i = 0; i < a.length; ++i) //使用a.length得到數組長度 a[i] = i+1; int b[] = a; // 並不是數組拷貝,類似指針,現在a和b指向同一個數組 for(int i = 0; i < b.length; ++i) System.out.print(b[i]+" "); // 打印1 ~ n } }
- 其它的一些用法
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int[] a = {1,9,2,4,5,3}; // Arrays.copyOf(type[] a, int length) // 從頭開始拷貝length個參數個元素,超過a的長度則補0 int[] b = Arrays.copyOf(a, a.length+2); for(int x : b) System.out.print(x+" "); System.out.println(); // Arrays.copyofRange(type[] a, int begin, int end) // 拷貝數組a中[begin, end)的元素至新數組 // end越界則補0 int []c = Arrays.copyOfRange(b, 3, 8); for(int i = 0; i < c.length; ++i) System.out.print(c[i]+" "); System.out.println(); Arrays.sort(c); //快速排序 String strc = Arrays.toString(c); //數組轉爲字符串 System.out.println(strc); //若數組a和b長度、元素對應相等,則爲true if( Arrays.equals(a, b) ) System.out.println("impossible!");; Arrays.fill(a, 2); //將數組a的元素全部用2填充 String stra = Arrays.toString(a); System.out.println(stra); int index = Arrays.binarySearch(b, 0, b.length, 4); // 二分查找,等價於Arrays.binarySearch(b, 4); // 中間2個參數是起始和終止的下標[begin, end) System.out.println(index); } }
- 多維數組
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int m = cin.nextInt(); int n = cin.nextInt(); // 動態創建m行n列的二維數組 int[][] a = new int[m][n]; // for-each遍歷二維數組 for(int[] x : a) for(int y : x) ; // JAVA還可以創建不規則數組,如上/下三角矩陣數組 // 如下則創建了一個下三角矩陣數組 int[][] b = new int[n][]; for(int i = 0; i < n; ++i) b[i] = new int[i+1]; for(int i = 0; i < b.length; ++i) { for(int j = 0; j < b[i].length; ++j) System.out.print(b[i][j]+" "); System.out.println(); } } }