JAVA(雜記三) -- 循環與數組

   循環
  • 首先,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();
    		}
    	}
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章