for循环_数组【MRN】

一、for的嵌套循环

1.格式

//输出5行10列的矩形
for(int i=0;i<5;i++) {
    for(int j=0;j<10;j++) {
        System.out.print("*");
    }
    System.out.println();
}

2.实例

  • 用*打印三角形
public class Model2 {

    public static void main(String[] args) {
        //正三角
        for(int i=0;i<7;i+=2) {
            for(int k=0;k<(7-i)/2;k++) {
                System.out.print(" ");
            }
            for(int j=0;j<=i;j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        //左倒三角
        System.out.println("------------------");
        for(int i=0;i<7;i++) {
            for(int j=7;j>i;j--) {
                System.out.print("*");
            }
            System.out.println();
        }
        //右倒三角
        System.out.println("------------------");
        for(int i=0;i<7;i++) {
            for(int k=0;k<i;k++) {
                System.out.print(" ");
            }
            for(int j=7;j>i;j--) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

结果
**********
**********
**********
**********
**********
   *
  ***
 *****
*******
------------------
*******
******
*****
****
***
**
*
------------------
*******
 ******
  *****
   ****
    ***
     **
      *

  • 打印九九乘法表
public class Model1 {

	public static void main(String[] args) {
		//for循环i作为第一个乘数
		for(int i=1;i<=9;i++) {
			//for循环j作为第二个乘数
			for(int j=1;j<=i;j++) {
				//将a作为字符串接收i*j的值
				String a = ""+i*j;
				//判断i*j结果是否为个位
				if(i*j/10==0) {
					//如果是个位则在前添加0
					a = "0"+i*j;
				}
				//输出乘法表
				System.out.print(j+"*"+i+"="+a);
				//每次输出一个制表一次
				System.out.print("\t");
			}
			//每打印一行换行
			System.out.println("");
		}
	}
}
  • 打印1-100的因数
public class Model3 {

	public static void main(String[] args) {
		for(int i=1;i<=100;i++) {
			System.out.print(i+"的因数有:");
			for(int j=1;j<=i;j++) {
				if(i%j==0) {
					if(j==i) {
						System.out.print(j);
					}else {
						System.out.print(j+",");
					}
				}
			}
			System.out.println();
		}
	}
}

3.调出多重循环

  • 加锁
//加锁
boolean b = true; //b相当于一个锁
while(b) {
    for(int i=0;i<=20;i++) {
        if(i==18) {
            b = false;
            break;
        }
        System.out.println("----------"+i);
    }
}
  • 跳出指定的代码块儿
//跳出指定的代码块儿
w:while(b) { //为循环定义一个名
    for(int i=0;i<=20;i++) {
        if(i==18) {
            break w; //直接break定义的名
        }
        System.out.println("----------"+i);
    }
}

二、数组

1.声明数组

//声明数组
int array[];
int[] array2;//建议该种写法

//开辟空间
array = new int[3];//开辟3个空间,长度为3的数组
//开辟空间后,里面保存的是该类型的默认值

double[] array3 = new double[5];//声明长度为5的double数组

//声明并赋值
int[] array4 = {1,2,3};
array4 = new int[] {1,2,3,4};

array = new int[5];
//给第一个元素赋值
array[0] = 5;

2.注意事项

  • 数组的类型和长度不可修改

  • 数组中只能存放指定类型的数值

  • 数组的下标不能超过最大下标,否则报错

3.获取数组长度

int a = array5.length;

4.工具类

import java.util.Arrays;

public class Model6 {
    public static void main(String[] args) {
        int[] array = new int[5];
        //向指定数组中填充指定的数据
        Arrays.fill(array, 5);

        //将数组中的元素转为字符串后输出
        System.out.println(Arrays.toString(array));

        array = new int[] {1,2,3,4,5,6,7};
        //从原数组中复制指定长度的数据,超出部分补该数据类型的默认值
        int[] array1 = Arrays.copyOf(array, 3);
        System.out.println(Arrays.toString(array1));

        int[] array = {1,2,3,4,5,6,7,8,9,0};
        int[] array2 = new int[8];
        //从一个数组中复制到另一个数组指定位置、长度的数据
        /**
		 * array是初始数组,
		 * 0代表从下表为零出开始复制,
		 * array2是目标数组,
		 * 3代表复制到目标数组中的位置
		 * 4代表将要复制的数据长度(不能超出初始数组大小)
		 */
        System.arraycopy(array, 0, array2, 3, 4);
        System.out.println(Arrays.toString(array2));
    }
}

5.二维数组

import java.util.Arrays;

public class Model8 {
    public static void main(String[] args) {
        //二维数组中有3个子元素,每个子元素的长度为4
        int[][] arrays1 = new int[3][4];
        //二维数组的子元素数是固定的
        arrays1[1] = new int[3];
        for(int i=0;i<arrays1.length;i++) {
            for(int j=0;j<arrays1[i].length;j++) {
                arrays1[i][j]=(int)(Math.random()*30);
            }
            System.out.println(Arrays.toString(arrays1[i]));
        }
    }
}

6.数组排序

  • 冒泡排序
int[] array = {4,5,3,0,8,3,2};
//前后两个元素比较,大的放到最后面
for(int i=0;i<array.length-1;i++) {
    for(int j=0;j<array.length-i-1;j++) {
        int num;
        if(array[j] > array[j+1]) {
            num = array[j];
            array[j] = array[j+1];
            array[j+1] = num;
        }
    }
}
System.out.println(Arrays.toString(array));

//前后两个元素比较,小的放到最前面
for(int j=0;j<array.length-1;j++) {
    for(int i=j+1;i<array.length;i++) {
        int num;
        if(array[j]>array[i]) {
            num = array[j];
            array[j] = array[i];
            array[i] = num;
        }
    }
}
System.out.println(Arrays.toString(array));
//--------------------------------------------
//以下为错误案例
/**
 * 说明:内for循环可能一次循环就会改变数组顺序,所以array[i]的值需要再次获取
 * 解决:将int a = array[i];放到内for循环中
 * 
 */
for(int i=0;i<array.length-1;i++) {
    int a = array[i];
    for(int j=i+1;j<array.length;j++) {
        int num;
        int b = array[j];
        if(a>b) {
            num = array[j];
            array[j] = array[i];
            array[i] = num;
        }
    }
}
System.out.println(Arrays.toString(array));
结果
    [2, 3, 0, 3, 4, 5, 8]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会功夫的李白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值