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();
    		}
    	}
    }

猜你喜欢

转载自blog.csdn.net/love_irelia97/article/details/80530372