java基础

命名规范

 // 违反标识符规则声明变量的举例
 // 例子1:使用的%不属于允许使用的范围
 // int age%me = 5;
 
  // 例子2:不能以数字开头
  // int 2age = 50;
  
  // 例子3:不能包含空格
  // int age student = 33;
  
  // 例子4:严格区分大小写
  // int salary = 10;
  // System.out.println(Salary);

java八大类型

	// byte类型变量
	byte b = 25;
	System.out.println(b);
	
	// short类型变量
	short s = 1000;
	System.out.println(s);
	
	// int类型变量
	int i = 500000;
	System.out.println(i);
	
	// long类型变量
	long l = 60000000;
	System.out.println(l);
	
	// float类型变量
	float f = 666.66f;
	System.out.println(f);
			
	// double类型变量
	double d = 777.77;
	System.out.println(d);
	
	// boolean类型变量
	boolean flag = true;
	System.out.println(flag);
	
	// char类型变量
	char c = 'x';
	System.out.println(c);

print与println

	// 带有换行效果的输出
	System.out.println("hello java换行");
	
	// 不带有换行效果的输出
	System.out.print("hello java不换行");
	// 调用println()函数时不传参数,代表仅执行换行操作
	// System.out.println();
	System.out.print("hello java不换行");
	
	// 调用print()函数时不传参数,将导致编译错误
	// System.out.print();


	// 输出十进制数
	System.out.println(10);
	
	// 输出二进制数
	System.out.println(0B10);
	
	// 输出八进制数
	System.out.println(010);
	
	// 输出十六进制数
	System.out.println(0x10);

java类型转换

	// 测试类型自动转换
	byte b = 100;
	int i = b;
	int code = 'W';
	double number = 100;
	
	// 不兼容的类型: 从int转换到byte可能会有损失
	// byte myByte = 130;
	
	// 多种不同类型数据在一起运算时,会自动转换为最大的类型
	byte byteNumber = 10;
	short shortNumber = 20;
	int intNumber = 30;
	
	// 不兼容的类型: 从int转换到byte可能会有损失
	// byte sum = byteNumber + shortNumber + intNumber;
	// short sum = byteNumber + shortNumber + intNumber;
	int sum = byteNumber + shortNumber + intNumber;
	
	// byte、short、char运算时按照int类型处理
	// byte b1 = 5;
	// byte b2 = 6;
	// byte sumByte = b1 + b2;
	
	char c1 = 'a';
	char c2 = 'b';
	
	// 连接两个char类型的+号,执行的是数学的加法运算
	System.out.println(c1 + c2);
	
	// 测试强制类型转换
	byte byteValue = (byte)100L;
	long longValue = 100;
	int intValue = (int)longValue;
	
	// 小数类型转换为整数类型时会直接舍弃小数部分
	double doubleValue = 3.9415926;
	int convertDouble = (int)doubleValue;
	System.out.println("convertDouble:"+convertDouble);
	
	// 超出数据存储范围的强制转换会溢出
	int intOriginalValue = 300;
	byte byteCurrentValue = (byte)intOriginalValue;
	System.out.println(byteCurrentValue);
	
	// 对布尔类型进行强制转换
	// 编译报错:不兼容的类型: boolean无法转换为int
	// int fromBoolean = (int)true;
	
	// 先做数学的加法,得到15,然后再做字符串连接
	System.out.println(5 + 10 + "abc");
	
	// 整体就都是字符串连接
	// "abc" + 5是字符串连接操作,结果是"abc5"这个字符串
	// "abc5"这个字符串再和10做字符串连接,得到"abc510"这个字符串
	System.out.println("abc" + 5 + 10);
	
	// 任何数据类型想转换为字符串类型,最简单的办法就是和""做字符串连接
	String doubleStr = "" + 100.33;
	
	System.out.println(doubleStr);
	
	// 字符串想转换为基本数据类型不能直接强转
	// 编译报错:不兼容的类型: String无法转换为int
	// int x = (int)"123";
	
	// 需要调用包装类型的方法来转换——这个后面才正式学
	int x = Integer.parseInt("123");
	System.out.println(x);
	
	int feng = 1;
	int jie = 2;
	
	// 先按照int类型做除法运算,算出来还是转换为int类型,所以也就是把0.5转为int,所以结果是0
	// 把int类型的0再转换为double,只能是0.0
	// double result = feng/jie;
	
	// 先把feng转换为double,jie会自动升级为更大的double类型,所以最终是按照double类型做除法
	// 算出来是0.5
	double result = (double)feng/jie;
	System.out.println(result);

++i与i++

     int i1 = 10;
     int i2 = 20;
	 
     int i = i1++;						// i是10 i1是11
     System.out.print("i="+i+" ");		// 10
     System.out.println("i1="+i1);		// 11
     i = ++i1;							// i是12 i1是12
     System.out.print("i="+i+" ");		// 12
     System.out.println("i1="+i1);		// 12
     i = i2--;							// i是20 i2是19
     System.out.print("i="+i+" ");		// 20
     System.out.println("i2="+i2);		// 19
     i = --i2;							// i是18 i2是18
     System.out.print("i="+i+" ");		// 18
     System.out.println("i2="+i2);		// 18

运算

    // 设定一个三位数:962
	int originalValue = 962;
	
	// 要取百位数,直接让三位数除以100即可
	int hundredValue = originalValue / 100;
	
	// 要取十位数,先让三位数对100取模,这个模运算的结果就是一个两位数了
	// 两位数除以10就是十位的数字
	int tenValue = originalValue % 100 / 10;
	
	// 要取个位数,先让三位数对10取模,这个模运算的结果就是一个个位数了
	int singleValue = originalValue % 10;
	
	System.out.println("百位数=" + hundredValue);
	System.out.println("十位数=" + tenValue);
	System.out.println("个位数=" + singleValue);

三元运算

	// 从两个数中返回最大值
	int i = 10;
	int j = 15;
	int result = (i>j)? i : j;
	System.out.println("i和j中较大的是:"+result);
	
	// 从三个数中返回最大值
	// 从前两个中找到最大值,再和第三个比
	int m = 66;
	int n = 33;
	int p = 44;
	
	result = (m > n)? ((m > p)?m:p) : ((n > p)?n:p);
	
	System.out.println("m、n和p中较大的是:"+result);

scanner对象

// 1.创建Scanner对象
	Scanner scanner = new Scanner(System.in);
	
	// 2.读取int类型数据
	System.out.print("请输入一个整数:");
	
	// 调用scanner对象的nextInt()方法
	int age = scanner.nextInt();
	
	System.out.println("age="+age);
	
	// 3.读取boolean类型数据
	System.out.print("请输入一个布尔值:");
	boolean flag = scanner.nextBoolean();
	
	System.out.println("flag="+flag);
	
	// 4.读取字符串
	System.out.print("请输入一个字符串:");
	
	// next()方法会因为空格而终止读取
	String strValue = scanner.next();
	System.out.println("strValue="+strValue);
	
	// 建议使用:
	// nextLine()方法不会因为空格而终止读取
	strValue = scanner.nextLine();
	System.out.println("strValue="+strValue);

if

	// 创建Scanner对象
	Scanner scanner = new Scanner(System.in);

	System.out.print("请输入i:");
	int i = scanner.nextInt();

	System.out.print("请输入j:");
	int j = scanner.nextInt();

	// 测试使用单独的if语句
	// 当if(判断条件)为true时执行{}中的语句
	if (i > j){
		System.out.println("i 比 j 大");
	}

	// 不建议这么做
	// 如果if语句块中只有一条语句,可以省略{}
	if (i < j)
		System.out.println("i 比 j 小");

	System.out.println("后续操作");

	// 读取一个布尔值
	System.out.print("请输入flag:");
	boolean flag = scanner.nextBoolean();

	// 没有必要写flag == true
	if (flag) {
		System.out.println("flag是真的");
	}

else if

	// 创建Scanner对象
	Scanner scanner = new Scanner(System.in);

	System.out.print("请输入i:");
	int i = scanner.nextInt();

	System.out.print("请输入j:");
	int j = scanner.nextInt();

	System.out.print("请输入m:");
	int m = scanner.nextInt();

	System.out.print("请输入n:");
	int n = scanner.nextInt();

	if (i > j){								// 执行条件判断①
		System.out.println("i 比 j 大");	// ①为true时执行
	} else if (i < j) {						// ①为false继续执行下一个条件判断②
		System.out.println("i 比 j 小");	// ②为true时执行
	} else {								
		System.out.println("i 和 j 相等");	// ②为false时执行
		
		// 嵌套在其他if...else结构内的if
		if (m > n){
			System.out.println("m 比 n 大");
		}
	}

withch case

	// 创建Scanner对象
	Scanner scanner = new Scanner(System.in);

	System.out.print("请输入i:");
	int i = scanner.nextInt();

	System.out.print("请输入j:");
	int j = scanner.nextInt();

	System.out.print("请输入m:");
	int m = scanner.nextInt();

	System.out.print("请输入n:");
	int n = scanner.nextInt();

	if (i > j){								// 执行条件判断①
		System.out.println("i 比 j 大");	// ①为true时执行
	} else if (i < j) {						// ①为false继续执行下一个条件判断②
		System.out.println("i 比 j 小");	// ②为true时执行
	} else {								
		System.out.println("i 和 j 相等");	// ②为false时执行
		
		// 嵌套在其他if...else结构内的if
		if (m > n){
			System.out.println("m 比 n 大");
		}
	}

do while

	Scanner scanner = new Scanner(System.in);
	
	System.out.print("请输入一个整数:");
	int userInput = scanner.nextInt();
	
	int positiveCount = 0;
	int negativeCount = 0;
	
	do {
		
		if (userInput > 0){
			
			positiveCount++;
			
		}
		
		if (userInput < 0){
			
			negativeCount++;
			
		}

		System.out.println("正数的个数:"+positiveCount);
		System.out.println("负数的个数:"+negativeCount);
		
		System.out.print("请输入一个整数:");
		userInput = scanner.nextInt();
		
	}while(userInput != 0);


	
	// do...while循环至少会执行一次
	// 打印1~10
	int i = 1;
	
	do {
		
		System.out.println("i="+i);
		
		i++;
		
	}while(i <= 0);

应用

九九乘法表
	System.out.println("左下角的99乘法表");
	// 外层循环负责控制『行』
	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();
	}
	
	System.out.println("=============================================");
	System.out.println();
	System.out.println("左上角的99乘法表");
	
	// 外层循环负责控制『行』
	for (int i = 1; i <= 9 ; i++ ) {
		
		// 内层循环负责控制『列』
		for ( int j = 9; j >= i ; j-- ){
			
			System.out.print(i + "×" + j + "=" + i * j + "\t");
			
		}
		
		System.out.println();
	}
	
	System.out.println("=============================================");
	System.out.println();
	System.out.println("右上角的99乘法表");
	
	// 外层循环负责控制『行』
	for (int i = 9; i >= 1 ; i-- ) {
		
		// 内层循环负责控制『列』
		for ( int j = 9; j >= 1 ; j-- ){
			
			if (j > i) {
				System.out.print("\t");
			}else{
				System.out.print(i + "×" + j + "=" + i * j + "\t");	
			}			
			
		}
		
		System.out.println();
	}
	
	System.out.println("=============================================");
	System.out.println();
	System.out.println("右下角的99乘法表");
	
	// 外层循环负责控制『行』
	for (int i = 1; i <= 9 ; i++ ) {
		
		// 为了让打印的数据靠右对齐,专门打印所需个数的\t
		for ( int t = 1; t <= 9-i; t++ ){
			System.out.print("\t");
		}
		
		// 保持不变
		// 内层循环负责控制『列』
		for ( int j = 1; j <= i ; j++ ){
			
			System.out.print(i + "×" + j + "=" + i * j + "\t");
			
		}
		
		System.out.println();
	}

breakLabel

System.out.println("外层循环执行开始了");
	a: for (int k = 1; k <= 10; k++){
		
		System.out.println("内层循环执行开始了");
		
		b: for (int i = 1; i <= 10; i++){
			
			if ( i == 5 ){
				
				break;
			}
			
			if ( k == 6 ){
				
				// 通过标号结束外层循环
				break a;
			}
			
			System.out.println("k = " + k + " i = " + i);
		}

		System.out.println("内层循环执行结束了");
		
	}

	System.out.println("外层循环执行结束了");

switch

	for (int i = 1; i <= 10; i++){
		
		switch(i){
			case 2:
				System.out.println("switch i="+i);
				break;
			case 3:
				System.out.println("switch i="+i);
				break;
			case 4:
				System.out.println("switch i="+i);
				break;
		}
		
		System.out.println("for i="+i);
		
	}

continueLabel

	a: for (int i = 1; i <= 10; i++){
		b: for (int j = 1; j <= 10; j++){
			
			if (i == 5) {
				
				// 使用标号可以控制标号对应的循环
				continue b;
			}
			
			System.out.println(i+","+j);
			
		}
	}

return

	for (int i = 1; i <= 10; i++){
	
		System.out.println("i="+i);
		
		if (i == 6){
			return ;
		}
		
	}
	
	// 由于整个函数结束了,所以这里的代码不会被执行到
	System.out.println("循环后面的代码");
	
}
实例

/**
查找100以内的所有素数
素数的概念:对于大于1的整数,只能被1和它自己整除
*/

public class Demo08FindPrimeNumber {

public static void main(String[] args){
	
	// 外层循环:列出从2开始到100的所有的数字
	for (int i = 2; i <= 100; i++){
		
		// 声明一个变量,用来保存当前数字是否为素数
		// 默认情况:先设置为true,后面再使用内层循环进行排除
		boolean primeFlag = true;
		
		// 内层循环验证i变量中保存的这个数是不是素数
		// 验证方式:用i对『从2到i/2』的所有数取模
		// 如果发现能够整除,那么说明i这个数不是素数
		for (int j = 2; j <= i/2; j++){
			
			if (i % j == 0){
				// 发现i能够被j整除时,说明i不是素数,所以直接将primeFlag变量设置为false
				primeFlag = false;
				
				// 由于i只要能被任何一个j整除,就足矣判断i不是素数,所以后面j后面的值不必再试,这里使用break结束内层循环
				
				break;
			}
			
		}
		
		// 如果i真的是素数,那么它就应该在通过上面内层循环的层层考验后还是true
		if (primeFlag){
			System.out.println("i="+i);
		}
		
	}
	
}

}

public class Demo09FamilyAccount {

public static void main(String[] args){
	
	// 初始化:用户记账金额的初始值设置为10000元
	int balance = 10000;
	
	// 初始化:显示收支明细时使用的表头信息(将来在表头字符串后面附加表格详细内容)
	String table = "收支\t账户金额\t收支金额\t说    明\n";
	
	// 界面:为了避免用户执行一个菜单项之后就直接退出,所有操作要放在一个死循环中
	// (在测试过程中,还没有编写退出功能,使用Ctrl+c强制结束程序)
	while (true) {
	
		// 界面:标题
		System.out.println("-----------------家庭收支记账软件-----------------");
		
		// 界面:菜单选项
		System.out.println("\t\t1 收支明细");
		System.out.println("\t\t2 登记收入");
		System.out.println("\t\t3 登记支出");
		System.out.println("\t\t4 退    出");
		
		// 界面:提示用户输入菜单项的序号:
		System.out.print("请输入菜单项的序号:");
		
		// 读取:用户输入的菜单项序号
		char menuSelection = Utility.readMenuSelection();
		
		// 系统内部运算:根据用户输入的菜单项,执行对应操作
		switch(menuSelection){
			case '1':
			
				System.out.println(table);
				
				break;
			case '2':
				
				// 界面:提示用户输入收入金额
				System.out.print("请输入收入金额:");
				int income = Utility.readNumber();
				
				// 界面:提示用户输入收入说明
				System.out.print("请输入收入说明:");
				String incomeDescription = Utility.readString();
				
				// 测试:System.out.print("收入金额:" + income + " 收入说明:" + incomeDescription);
				
				// 系统内部运算:将收入金额累加到总余额中
				balance = balance + income;
				
				// 系统内部运算:将新的收入明细信息附加到表格中
				table = table + "收入\t" + balance + "\t\t" + income + "\t\t" + incomeDescription + "\n";
				
				System.out.println("已保存收入登记信息");
				
				break;
			case '3':
				
				// 界面:提示用户输入支出金额
				System.out.print("请输入支出金额:");
				int outcome = Utility.readNumber();
				
				// 界面:提示用户输入支出说明
				System.out.print("请输入支出说明:");
				String outcomeDescription = Utility.readString();
				
				// 测试:System.out.print("支出金额:" + outcome + " 支出说明:" + outcomeDescription);
				
				// 系统内部运算:将支持金额从总金额中减去
				balance = balance - outcome;
				
				// 系统内部运算:将新的支出明细信息附加到表格中
				table = table + "支出\t" + balance + "\t\t" + outcome + "\t\t" + outcomeDescription + "\n";
				
				System.out.println("已保存支出登记信息");
				break;
			case '4':
			
				// 界面:打印信息提示用户输入确认是否退出的字符
				System.out.print("确认是否退出(Y/N):");
				char confirmWord = Utility.readConfirmSelection();
				
				// 系统内部运算:如果用户输入的是Y,那么整个程序停止执行即可
				if (confirmWord == 'Y') {
					return ;
				}
			
				break;
		}
		
	}
}

}

utility
import java.util.*;

public class Utility {
private static Scanner scanner = new Scanner(System.in);

public static char readMenuSelection() {
    char c;
    for (; ; ) {
        String str = readKeyBoard(1);
        c = str.charAt(0);
        if (c != '1' && c != '2' && c != '3' && c != '4') {
            System.out.print("选择错误,请重新输入:");
        } else break;
    }
    return c;
}

public static int readNumber() {
    int n;
    for (; ; ) {
        String str = readKeyBoard(4);
        try {
            n = Integer.parseInt(str);
            break;
        } catch (NumberFormatException e) {
            System.out.print("数字输入错误,请重新输入:");
        }
    }
    return n;
}

public static String readString() {
    String str = readKeyBoard(8);
    return str;
}

public static char readConfirmSelection() {
    char c;
    for (; ; ) {
        String str = readKeyBoard(1).toUpperCase();
        c = str.charAt(0);
        if (c == 'Y' || c == 'N') {
            break;
        } else {
            System.out.print("选择错误,请重新输入:");
        }
    }
    return c;
}

private static String readKeyBoard(int limit) {
    String line = "";

    while (scanner.hasNext()) {
        line = scanner.nextLine();
        if (line.length() < 1 || line.length() > limit) {
            System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
            continue;
        }
        break;
    }

    return line;
}

}

数组

初识

int[] arr = new int[]{8,2,1,0,3};

    int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};

    String tel = "";

    for(int i = 0;i < index.length;i++){

        tel += arr[index[i]];
        System.out.println(index[i]);
        System.out.println("tel:"+tel);

    }

    System.out.println("联系方式:" + tel);
}


    // 1.创建数组保存星期N的英语单词
    String[] weekArray = new String[7];
    weekArray[0] = "Monday";
    weekArray[1] = "Tuesday";
    weekArray[2] = "Wednesday";
    weekArray[3] = "Thursday";
    weekArray[4] = "Friday";
    weekArray[5] = "Saturday";
    weekArray[6] = "Sunday";

    // 2.读取用户的键盘输入
    Scanner scanner = new Scanner(System.in);

    System.out.print("请输入1~7数字:");
    int number = scanner.nextInt();

    // 3.根据用户输入的数字从数组中取值
    // 注意:用户输入的数字-1是数组下标
    String week = weekArray[number - 1];
    System.out.println("week = " + week);
简单应用1

// 创建数组对象用来保存评委打分成绩
int[] scoreArray = {5,4,6,8,9,0,1,2,7,3};

    // 声明两个变量,用于保存打分数据中的最大值和最小值
    // maxScore和minScore的初始值应该是数组中的某一个元素
    // 以minScore为例,如果初始值为0,原始数组中所有数值都比0大,则无法正确找到真正的最小值
    int maxScore = scoreArray[0];
    int minScore = scoreArray[0];

    // 遍历数组,获取每一个具体的分数
    for (int i = 0; i < scoreArray.length; i++) {

        // 获取每一个数组元素
        int score = scoreArray[i];

        // 拿当前遍历得到的元素和maxScore进行比较
        if (score > maxScore) {

            // 如果当前元素大于maxScore,则将当前元素赋值给maxScore
            maxScore = score;
        }

        // 拿当前遍历得到的元素和minScore进行比较
        if (score < minScore) {

            // 如果当前元素小于minScore,则将当前元素赋值给minScore
            minScore = score;
        }
    }

    System.out.println("minScore = " + minScore);
    System.out.println("maxScore = " + maxScore);

    // 声明变量用来保存累加的结果
    int sum = 0;

    // 为了求平均值,需要再遍历一次
    for (int i = 0; i < scoreArray.length; i++) {

        int score = scoreArray[i];

        // 如果遇到最高分或最低分就跳过累加,那么就会将所有最高分跳过
        // 极限情况下,所有分数都是最高分时,所有分数都会跳过,
        // 最终的平均值就是0,这个结果显然是错误的
        // 最低分同理
        // 结论:不能无脑跳过

// if (score == maxScore) {
// continue;
// }
//
// if (score == minScore) {
// continue;
// }

        sum = sum + score;

    }

    // 根据评分规则,最高分和最低分分别只去掉一个,所以在上面全部分数累加结果中把最高分和最低分减去即可
    // 累加结果除以8得到平均值
    double average = (sum - maxScore - minScore) / 8.0;

    System.out.println("average = " + average);
简单应用2
    // 通过把字符类型的数据强转成int类型可以查看字符底层的编码值
    // System.out.println((int)'a');

    // 创建字符数组用来保存26个英文字母
    char[] wordArray = new char[26];

    // 从0~25遍历数组,给数组元素赋值
    for (int i = 0; i <= 25; i++) {
        wordArray[i] = (char) (i + 97);
        // System.out.println("wordArray["+i+"] = " + wordArray[i]);
    }

    // ---------------------------------
    // 遍历字母数组,显示当前元素的同时还打印它对应的大写字母
    for (int i = 0; i <= 25; i++) {
        char word = wordArray[i];

        // 将当前字符-32得到对应的大写字母
        char upperWord = (char) (word - 32);

        System.out.println("小写字母:" + word + " 大写字母:" + upperWord);
    }
简单应用3
  // 一、根据用户输入的数据创建数组对象
    // 1.创建Scanner对象
    Scanner scanner = new Scanner(System.in);

    // 2.读取用户输入的学生人数
    System.out.print("请输入学生人数:");
    int studentCount = scanner.nextInt();

    // 3.根据用户输入的学生人数创建数组对象(以学生人数作为数组长度)
    int[] scoreArray = new int[studentCount];

    // 4.将用户输入的学生成绩保存到数组中
    for (int i = 0; i < studentCount; i++) {

        // 5.读取用户输入
        System.out.print("请输入第" + (i + 1) + "位学生成绩:");
        int score = scanner.nextInt();

        // 6.将学生成绩存入数组下标对应的位置
        scoreArray[i] = score;

    }

    // 二、查找已输入数据中的最大值
    // 1.声明一个变量用来存储最大值
    // 为什么最大值变量的初始值设置为scoreArray[0]?
    // 假设成绩是:-10,-20,-30
    // 假设maxScore是:0
    // 最大值是:0
    int maxScore = scoreArray[0];

    // 2.遍历成绩数组
    for (int i = 0; i < scoreArray.length; i++) {

        // 3.获取当前成绩数据
        int score = scoreArray[i];

        // 4.检查当前成绩是否大于maxScore
        if (score > maxScore) {

            // 5.如果当前成绩大于maxScore,就把maxScore设置为当前成绩
            maxScore = score;
        }
    }

    System.out.println("maxScore = " + maxScore);

    // 三、按照等级打印学生成绩
    // 1.遍历学生成绩数组
    for (int i = 0; i < scoreArray.length; i++) {

        // 2.获取当前成绩数据
        int score = scoreArray[i];

        // 3.逐级判断当前成绩数据属于哪个等级
        if (score > maxScore - 10) {

            System.out.println("第" + (i+1) + "位学生的成绩" + score + "是A级");

        } else if (score > maxScore - 20) {

            System.out.println("第" + (i+1) + "位学生的成绩" + score + "是B级");

        } else if (score > maxScore - 30) {

            System.out.println("第" + (i+1) + "位学生的成绩" + score + "是C级");

        } else {

            System.out.println("第" + (i+1) + "位学生的成绩" + score + "是D级");

        }
二维数组
    // 1.创建二维数组,第一维长度为10
    int[][] yanghuiArr = new int[10][];

    // 2.通过双层for循环给二维数组填充数据
    for (int i = 0; i < yanghuiArr.length; i++) {

        // 3.创建一维数组,对yanghuiArr下标i位置进行初始化
        yanghuiArr[i] = new int[ i + 1 ];

        // 4.遍历一维数组,填充数据
        for (int j = 0; j <= i; j++) {

            // 5.一头(一维数组的下标0元素)一尾(一维数组的下标长度-1元素)固定就是1
            // 一维数组中最后一个元素的下标正好就是现在外层循环变量:i
            if (j == 0 || j == i) {

                yanghuiArr[i][j] = 1;

            } else {

                // 6.非头尾的元素,由上一行中两个元素相加得到
                // 第一个值的下标:[i-1][j-1]
                // 第二个值的下标:[i-1][j]
                yanghuiArr[i][j] = yanghuiArr[i-1][j-1] + yanghuiArr[i-1][j];

            }

        }

    }

    // 7.遍历填充数据的二维数组
    for (int i = 0; i < yanghuiArr.length; i++) {

        int[] yanghuiValueArr = yanghuiArr[i];

        for (int j = 0; j < yanghuiValueArr.length; j++) {

            System.out.print(yanghuiValueArr[j] + "\t");

        }

        System.out.println();

    }

// 一、声明二维数组变量并创建二维数组对象
// 格式1:动态初始化——创建数组对象时就指定了两个维度的数组长度
int[][] arr2d01 = new int[3][2];
arr2d01[0][0] = 100;
arr2d01[0][1] = 101;
arr2d01[1][0] = 102;
arr2d01[1][1] = 103;
arr2d01[2][0] = 104;
arr2d01[2][1] = 105;

    // 格式2:动态初始化——仅指定第一个维度的数组长度
    int[][] arr2d02 = new int[3][];

    // Java中多维数组不必都是规则矩阵形式
    arr2d02[0] = new int[]{3, 5, 7};
    arr2d02[1] = new int[]{14, 21, 66, 89};
    arr2d02[2] = new int[]{90, 100};

    System.out.println();

    // 格式3:静态初始化——在创建对象时将数据填充
    // 此时如果某个元素位置设置为null不会编译报错,但是访问这个位置时还是要先初始化
    int[][] arr2d03 = new int[][]{{1,2,3}, {4,5}, null, {6,7,8}};

    // 前面设置null的地方,需要初始化才可以访问
    arr2d03[2] = new int[]{12,24};
    arr2d03[2][0] = 5;

    // 格式4:声明变量时,两层[]没在一起
    int[] arr2d04[] = new int[][]{{1,2,3}, {4,5}, {6,7,8}};

    // 二、访问二维数组元素(读、写)
    int[][] arr2d05 = new int[2][2];

    // 向数组元素写入数据
    arr2d05[1][0] = 10;

    // 读取数组元素
    System.out.println("arr2d05[1][0] = " + arr2d05[1][0]);

    // 三、遍历二维数组:需要使用双层嵌套的循环
    int[][] arr2d06 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};

    // 先遍历第一个维度:取出每一个一维数组
    for (int i = 0; i < arr2d06.length; i++) {

        int[] intArr = arr2d06[i];

        for (int j = 0; j < intArr.length; j++) {
            int intValue = intArr[j];
            System.out.println("intValue["+i+"]["+j+"] = " + intValue);
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值