【Java全栈学习笔记-U1-day07】二重循环+二维数组
声明:Java全栈学习笔记是为整理当初学习Java时的学习笔记,以复习为目的而制作,仅提供大家交流学习,请勿用作他用
day07 二重循环+二维数组
文章目录
目标
-
二重循环(掌握)
-
跳转语句在二重循环的应用
-
二维数组(扩展:理解)
一、 二重循环
1.1 什么是二重循环
一个循环体内又包含别一个完整的循环的结构。
1.2 构成二重循环
任意两个循环嵌套即可构成二重循环
for(...){ //外层循环
for(...){ //内层循环
循环体……
}
}
注意
外层循环一次,内层循环一轮
1.3 二重循环的应用
二重循环一般用于解决**矩阵图形(表格)**问题。
for(...){ //外层循环 控制行
for(...){ //内层循环 控制列
循环体
}
System.out.println(); //换行
}
示例一:理解二重循环
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 12:43
*/
public class demo1 {
public static void main(String[] args) {
//示例一:理解二重循环
for (int i = 1; i < 3; i++) { //外层循环
for (int j = 1; j < 4; j++) { //内层循环
System.out.print("小林 ");
}
System.out.println();
}
}
}
示例二:求3个班级的各四名学员的平均成绩
import java.util.Scanner;
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 14:33
*/
public class demo2 {
public static void main(String[] args) {
//示例:求3个班级的各4名学院的平均成绩
Scanner input = new Scanner(System.in);
for (int i = 1; i < 4; i++) { //外层循环控制班级数目
System.out.println("第" + i + "个班级");
//循环输入四名学员的成绩
int sum = 0; //累加器
for (int j = 1; j < 5; j++) { //内层循环控制学生的数目
System.out.println("请输入第" + j + "个学员的成绩");
int grade = input.nextInt(); //接收输入成绩
sum = sum + grade;
}
int avg = sum / 4;
System.out.println("平均分是:" + avg);
}
}
}
示例三:输出以*号代表的矩形
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 14:50
*/
public class demo3 {
public static void main(String[] args) {
//示例:输出以*号为代表的矩形
for (int i = 1; i < 6; i++) { //外层控制行
for (int j = 1; j < 6; j++) { //内层控制列
System.out.print("*");
}
System.out.println();
}
}
}
示例四:输出以*号代表的三角形
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 14:52
*/
public class demo4 {
public static void main(String[] args) {
for (int i = 1; i < 6; i++) { //行
//控制列
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println();
//输出乘法表----练习
for (int i = 1; i < 10; i++) { //行
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
}
}
示例五:输出以*号代表的等腰三角形
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 16:11
*/
public class demo5 {
public static void main(String[] args) {
/*输出以*号代表的以下图形等腰 三角形*/
int rows = 5; //总行数
for (int i = 1; i <= rows; i++) { //行
//控制空格
for (int j = 1; j <= rows - i ; j++) {
System.out.print(" ");
}
//控制*
for (int k = 1; k <= 2 * i - 1 ; k++) {
System.out.print("*");
}
System.out.println("");
}
}
}
二、跳转语句在二重循环中的应用
注意:跳转语句用在二重循环中,只作用于当前循环,不作用于外层循环
示例:
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 16:50
*/
public class demo6 {
public static void main(String[] args) {
//跳转语句在二重循环中
for (int i = 1; i <= 2; i++) { //外层循环
for (int j = 1; j <= 3; j++) { //内层循环
System.out.print("小林");
//break; //退出循环
continue; //退出本次循环,继续下一次
}
System.out.println();
}
}
}
三、 二维数组(扩展)
3.1 数组分类
一维数组、二维数组、多维数组
3.2 二维数组(解决矩阵存储(表)问题)
/**
* @Author: 开心就好9905
* @Date: 2024/2/27 17:00
*/
public class demo7 {
public static void main(String[] args) {
//1.声明二维数组
//数据类型 [][] 数组名称
//2.分配内存空间
//数组名称 = new 数据类型[行数][列数]
//String [][]twoary = new String[3][3];
//4.数组赋值
//数组名称[行数][列数] = 值
/*twoary[0][0]="杨过";
twoary[0][1]="小龙女";
twoary[0][2]="平哥";
twoary[1][0]="宋吉";
twoary[1][1]="丁文星";
twoary[1][2]="马蓉";
twoary[2][0]="张三";
twoary[2][1]="老王";
twoary[2][2]="麻子";*/
//7.定义二维数组并且初始化
String [][]twoary=new String[][]{
{"杨过", "小龙女", "平哥"},
{"宋吉", "丁文星", "马蓉"},
{"张三", "老王", "麻子"}
};
//5.获取元素
System.out.println(twoary[0][0]);
//6.显示二维数组中所有内容
for (int i = 0; i < twoary.length ; i++) { //行数
for (int j = 0; j < twoary[i].length ; j++) { //列
System.out.print(twoary[i][j] + "\t");
}
System.out.println();
}
}
}
数组总结:
一维数组:解决线性问题
二维数组:解决一个面的问题
多维数组:解决立体图形问题
作业
作业一
请输入行数,显示对应行数的倒三角形:
以5行例:每行*号为:9 7 5 3 1
效果如下:
请输入行数:5
import java.util.Scanner;
/**
* @Author: 开心就好9905
* @Date: 2024/4/6 2:34
* @Description:NULL
*/
public class Triangle_Upside_Down {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入行数:");
int rows = scanner.nextInt(); //输入行数
for (int i = 1; i <= rows; i++) { //行
for (int j = 1; j <= 2 * (rows - i) + 1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
作业二
import java.util.Scanner;
/**
* @Author: 开心就好9905
* @Date: 2024/4/6 2:49
* @Description:NULL
*/
public class Three_Classes {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入第" + (i + 1) + "个班级的成绩");
double sum = 0;
for (int j = 0; j < 4; j++) {
System.out.print("第" + (j + 1) + "个学员的成绩:");
double grade = scanner.nextDouble();
sum = sum + grade;
}
double avg = sum / 4;
System.out.println("第" + (i + 1) + "个班级参赛学员的平均分是:" + avg);
System.out.println();
}
}
}
作业三
鸡兔同笼是我国古代著名的趣题之一。大约在1500之前,《孙子算经》中记载了这样一道题目:今有稚兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?试编写程序解决这个问题。
提示:
定义变量chookNum,rabbitNum分别表示鸡的数量, 兔子的数量,二者有如下两个关系。
chookNum + rabbitNum = 35;
2 * chookNum + 4*rabbitNum = 94;
鸡的数量chookNum的范围是0<=chookNum<=35,利用循环结构实现。
package Homework;
/**
* @Author: 开心就好9905
* @Date: 2023/2/14 16:21
* @Description:鸡兔同笼是我国古代著名的趣题之一。大约在1500之前,《孙子算经》中记载了这样一道题目:
* 今有稚兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?试编写程序解决这个问题。利用循环结构实现。
*/
public class Chicken_Rabbit {
public static void main(String[] args) {
/*
//方法一:利用方程关系式推算出结果,但没有循环结构,
//但不符合题目要求,pass,写着玩一下
Scanner input = new Scanner(System.in);
int chickenNum; //鸡的数量
int rabbitNum; //兔的数量
//int heads = input.nextInt(); //头的数量
//int legs = input.nextInt(); //腿的数量
int heads = 35; //头的数量
int legs = 94; //腿的数量
//chickenNum + rabbitNum = heads;
//2 * chickenNum + 4 * rabbitNum = legs;
chickenNum = 2 * heads - legs / 2;
rabbitNum = legs / 2 - heads;
System.out.println("鸡有" + chickenNum + "只,兔有" + rabbitNum +"只。");
*/
/*
//方法二:一次循环加判断
//Scanner input = new Scanner(System.in);
int chickenNum; //鸡的数量
int rabbitNum; //兔的数量
//int heads = input.nextInt(); //头的数量
//int legs = input.nextInt(); //腿的数量
int heads = 35; //头的数量
int legs = 94; //腿的数量
for (chickenNum = 1; chickenNum <= heads; chickenNum++){
rabbitNum = heads - chickenNum;
if (chickenNum + rabbitNum == heads && chickenNum * 2 + rabbitNum * 4 == legs){
System.out.println("鸡有" + chickenNum + "只,兔有" + rabbitNum +"只。");
}
}
*/
//方法二:穷举
//Scanner input = new Scanner(System.in);
int chickenNum; //鸡的数量
int rabbitNum; //兔的数量
//int heads = input.nextInt(); //头的数量
//int legs = input.nextInt(); //腿的数量
int heads = 35; //头的数量
int legs = 94; //腿的数量
for (chickenNum = 1; chickenNum <= heads; chickenNum++){
for (rabbitNum = 1; rabbitNum <= heads; rabbitNum++){
if (chickenNum + rabbitNum == heads && chickenNum * 2 + rabbitNum * 4 == legs){
System.out.println("鸡有" + chickenNum + "只,兔有" + rabbitNum +"只。");
}
}
}
}
}