1. 程式人生 > >5.2多重循環和二維數組

5.2多重循環和二維數組

圖形 第一個 換行 理解 rgs import can eth out

一.多重循環嵌套
1.循環可以任意次數嵌套
2.外層循環每執行一次,裏層循環就執行一遍

二.二維數組
1.定義:一維數組中存放的也是數組
2.聲明:int[][] nums = new int[5][5];
3.使用:nums[0][0] = 1; 我們可以將第一個下標理解為行數,第二個下標理解為列數

三.引用數據類型和基本數據類型的區別
1.基本數據類型存放的是數據,引用數據類型存放的是內存地址
2.基本數據類型賦值的話傳遞的是數據,而引用數據類型傳遞的是地址

四.例子

package com.demo1030;

import java.util.Scanner;

public class Demo {
	//例題:輸出1--100的數字,要求每行輸出10的數字
//	public static void main(String[] args) {
//		int num = 1;
//		for(int i=0;i<10;i++){//行
//			for(int j=0;j<10;j++){//列
//				System.out.print(num +"\t");
//				num++;
//			}
//			System.out.println();
//		}
//	}
	
	/*2。打印輸出如下圖形:要求,用戶輸入行數,按照行數打印圖形
	*
	**
	***
	****
	*****
	******
	*******
	********
	**/
//	public static void main(String[] args) {
//		Scanner scs = new Scanner(System.in);
//		System.out.println("請輸入行數:");
//		int count = scs.nextInt();
//		for(int i=0;i<count;i++){//行  輸出換行
//			for(int j=0;j<=i;j++){//列  輸出*
//				System.out.print("*");
//			}
//			System.out.println();
//		}
//	}
	
	/**
	 * 3.輸出乘法口訣表
		1*1=1
		1*2=2 2*2=4
		1*3=3 2*3=6 3*3=9
		.......
		1*9=9 ....................9*9=81
	 */
//	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();
//		}
//	}
	
	/**
	 * 4.輸出如下圖形
		     * 
		    ***
		   *****
		  *******
		 *********
		***********
	 */
//	public static void main(String[] args) {
//		for(int i=1;i<=6;i++){//行
//			for(int j=6;j>i;j--){//空格
//				System.out.print(" ");
//			}
//			for(int k=1;k<=2*i-1;k++){//輸出*
//				System.out.print("*");
//			}
//			System.out.println();
//		}
//	}
	
	//5.聲明一個10行10列的二維數組,把裏面的所有元素賦值為1,然後輸出
//	public static void main(String[] args) {
//		int[][] nums = new int[10][10];
//		for (int i = 0; i < nums.length; i++) {
//			for(int j=0;j<nums[i].length;j++){
//				nums[i][j] = 1;
//			}
//		}
//		
//		for (int i = 0; i < nums.length; i++) {
//			for(int j=0;j<nums[i].length;j++){
//				System.out.print(nums[i][j]+"\t");
//			}
//			System.out.println();
//		}
//	}
	//基本數據類型和引用數據類型的區別
//	public static void main(String[] args) {
//		int xm = 100;
//		int xh =200;
//		
//		xm = xh;
//		xm = 1000;
//		
//		System.out.println("xm="+xm);
//		System.out.println("xh="+xh);
//		
//		int[] xxm = {100};
//		int[] xxh = {200};
//		
//		xxm = xxh;
//		
//		xxm[0] = 1000;
//		System.out.println("xxm="+xxm[0]);
//		System.out.println("xxh="+xxh[0]);
//	}
	
	
	//6.聲明一個9行9列的二維數組,將1-81的數字填入到數組中
	//  a.先輸出所有元素的值
	//  b.求兩條對角線上的元素之和
//	public static void main(String[] args) {
//		int[][] nums = new int[9][9];
//		//存放1-81數字
//		int num=1;
//		for (int i = 0; i < nums.length; i++) {
//			for (int j = 0; j < nums[i].length; j++) {
//				nums[i][j] = num;
//				num++;
//			}
//		}
//		
//		//輸出
//		for (int i = 0; i < nums.length; i++) {
//			for (int j = 0; j < nums[i].length; j++) {
//				System.out.print(nums[i][j]+"\t");
//			}
//			System.out.println();
//		}
//		
//		//計算對角線元素之和
//		int sum1 = 0;//對角線1
//		int sum2 = 0; //對角線2
//		for (int i = 0; i < nums.length; i++) {
//			for (int j = 0; j < nums[i].length; j++) {
//				if(i==j){//第一條對角線
//					sum1+=nums[i][j];
//				}
//				if(i+j==nums.length-1){
//					sum2+=nums[i][j];
//				}
//			}
//		}
//		
//		System.out.println(sum1);
//		System.out.println(sum2);
//	}
}

  

/**
 * 1.用戶輸入行數,要求行數必須是奇數,如果不是讓用戶重新輸入。
 * 	然後根據行數打印輸出菱形
      *
    ***
   *****
  *******
 *********
  *******
   *****
    ***
     *
 */
package class1030;

import java.util.Scanner;

public class Test0201 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub


		int nums,nums2;
		Scanner sc=new Scanner(System.in);
		do{
		    System.out.println("請輸入一個奇數");
		    nums=sc.nextInt();
		    if(nums<0||nums%2!=1){
			    System.out.println("輸入有誤,請重新輸入");
		    }
		}while(nums<0||nums%2!=1);
		
		nums2=nums/2+1;
		for(int i=1;i<=nums2;i++)
		{
			for(int j=1;j<=nums2-i;j++)
			{
				System.out.print(" ");
			}
			for(int k=1;k<=2*i-1;k++)
			{
				System.out.print("*");
			}
			System.out.println();
		}
		nums2=nums/2;
		for(int i=1;i<=nums2;i++)
		{
			for(int j=1;j<=i;j++)
			{
				System.out.print(" ");
			}
			for(int k=1;k<=2*(nums2-i)+1;k++)
			{
				System.out.print("*");
			}
			System.out.println();
		}
	}

}
/**
 * 2.用戶輸入一個正整數,做因式分解:例如
 * 輸入100  輸出100=2*2*5*5
 * 輸入90   輸出90=2*3*3*5
 * 輸入13   輸出13=1*13 
 */
package class1030;

import java.util.Scanner;

public class Test0202 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		System.out.println("請輸入一個正整數");
		int num=sc.nextInt();
		int i;
		int num1=num;
		System.out.print(num+"=");
		//最小公因數i是這個數本身時跳出循環
		while(num!=1)
		{
			//從2開始整除,找到最小公因數時就跳出循環,每次得到最小公因數i
		    for(i=2;i<num;i++)
		    {
			    if(num%i==0)
			    {
				    break;
			    }
			}
		    //如果最小公因數i是這個數本身時,為質數,本輪循環結束後將跳出while循環
		    if(i==num1)
		    {
		    	System.out.print("1*");
		    }
		    //每次輸出最小公因數i
		    System.out.print(i);
		    //得到除以最小公因數i後的值,繼續判斷是否還有最小公因數
		    num=num/i;
		    //當最小公因數i是不是這個數本身時,輸出乘號
		    if(num!=1)
		    {
		    	System.out.print("*");
		    }
		}
	}

}

 

/*
 * 3.打印輸出楊輝三角形(10行):
1
1 1
1 2 1
1 3 3  1
1 4 6  4  1
1 5 10 10 5  1
1 6 15 20 15 6  1
.........
 */
package class1030;

public class Test0203 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[][]=new int[10][];
		for(int i=0;i<arr.length;i++){
			arr[i]=new int[i+1];
			for(int j=0;j<arr[i].length;j++){
				if(j==i||j==0){
					arr[i][j]=1;
				}else{
					if(j<i){
					    arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
					}
				}
				System.out.print(arr[i][j]+"\t");
			}
			System.out.println();
		}
	}
}

  

 

  

5.2多重循環和二維數組