Java 数组练习

这篇博客主要介绍了如何在Java中获取数组的最大值和次大值,并通过示例展示了数组的打印,包括99乘法表的四个方向打印。此外,还探讨了数字排列的数学问题,即6174现象的Java验证,以及如何打印一个9行的菱形图案。这些内容涵盖了数组操作和简单的算法应用。

获得数组最大值:

        int[] arr = {5,8,1,4,5,6,9,7,8,4};
		//2: 获取数组的最大值
		int max = arr[0];
		for (int i = 0; i < arr.length; i++) {
			if (arr[i]>max) {
				max=arr[i];
			}
		}
		System.out.println("最大值为:"+max);
		

获得数组次大值:

        Arrays.sort(arr);
		int max2 = arr.length-2;
		System.out.println(max2);

/**
     * 4:打印数组 如下
            {1,3,6,8,4,3}
                   *
                   *
                 * *
                 * *
                 * * *
               * * * * *
               * * * * *
             * * * * * *
     */

        int[] arr = {1,3,6,8,4,3};
		for (int i = 0; i < arr.length; i++) {
	        for (int j = i+1; j < arr.length;j++) {
	            if(arr[i]>arr[j]){
	                int x = arr[i];
	                arr[i] = arr[j];
	                arr[j] = x;
	            }
	        }
	    }
	    int rows = arr[arr.length - 1];
	    arr = new int[]{1,3,6,8,4,3};
	    for (int i = 1; i <= rows; i++) {
	        for (int j = 0; j < arr.length; j++) {
	            if(rows-arr[j]>=i){
	                System.out.print(" ");
	            }else {
	                System.out.print(" *");
	            }
	        }
	        System.out.println();
	    }

5: 使用for循环 打印99乘法表:打印四个方向的99乘法表

        System.out.println("左下");
		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("左上");
		for (int i = 9; i >= 1; i--) {
			for (int j = 1; j <= i; j++) {
				System.out.print(i+"*"+j+"="+(i*j)+"\t");
			}
			System.out.println();
		}
		System.out.println("右下");
		for(int i=1;i<=9;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("右上");
		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();
		}

任意一个四位数(数字不能全相同),把所有数字从大到小排列,再把所有数字从小到大排列,
    用前者减去后者得到一个新的数。重复对新得到的数进行上述操作,7 步以内必然会得到 6174。
         使用java代码证明

    public static void main(String[] args) {
		Integer kapre = 6174;
		System.out.println("请依次输入任意不相同的4个数: ");
		int[] intArr = new int[4];
		for (int i = 0; i < 4; i++) {
			Scanner inputW = new Scanner(System.in);
			intArr[i] = inputW.nextInt();
		}
		System.out.println("*******************************");
		for (int i = 1; i < 9; i++) {
			int kap = kaprekar(intArr);
			if (Integer.valueOf(kap).equals(kapre)) {
				System.out.println("第 " + i + " 步 Kaprekar常数6174出现!");
				break;
			}
			intArr = intToArray(kap);
		}

	}

	// 计算数值
	static int kaprekar(int[] arrayInt) {
		// 计算最小的四位数
		// 数组升序
		Arrays.sort(arrayInt);
		String strIntMini = "";
		for (int num : arrayInt) {
			strIntMini = strIntMini + Integer.toString(num);
		}
		int intMini = Integer.parseInt(strIntMini);
		System.out.println("最小的4位数是: " + intMini);
		// 计算最大的四位数
		// 数组降序
		int sizeArray = arrayInt.length;
		int[] newArrayInt = new int[sizeArray];
		newArrayInt = arrayIntDesc(arrayInt);
		String strIntMax = "";
		for (int num : newArrayInt) {
			strIntMax = strIntMax + Integer.toString(num);
		}
		int intMax = Integer.parseInt(strIntMax);
		System.out.println("最大的4位数是: " + intMax);
		int kap = intMax - intMini;
		System.out.println("二数相减为:" + intMax + "-" + intMini + "=" + kap);
		System.out.println("*******************************");
		return kap;
	}

	// 数组降序
	static int[] arrayIntDesc(int[] arrayInt) {
		int sizeArray = arrayInt.length;
		int[] newArrayInt = new int[sizeArray];
		for (int i = arrayInt.length - 1; i >= 0; i--) {
			newArrayInt[sizeArray - 1 - i] = arrayInt[i];
		}
		return newArrayInt;
	}

	// 数字转数组
	static int[] intToArray(int num) {
		String sNum = Integer.toString(num);
		int lNum = sNum.length();
		int[] arrayInt = new int[lNum];
		for (int i = 0; i < lNum; i++) {
			arrayInt[i] = Integer.parseInt(sNum.substring(i, i + 1));
		}
		return arrayInt;
	}

打印一个9行的菱形

    public static void main(String[] args) {
	    int row = 9;
	    for (int i = 1; i <= row / 2 + 1; i++) {
	        for (int j = 1; j <= row / 2 + 1 - i; j++) {
	            System.out.print(" ");
	        }
	        for (int k = 1; k <= 2 * i - 1; k++) {
	            System.out.print("*");
	        }
	        System.out.println();
	    }
	    for (int i = row / 2; i >= 1; i--) {
	        for (int j = 1; j <= row / 2 + 1 - i; j++) {
	            System.out.print(" ");
	        }
	        for (int k = 1; k <= 2 * i - 1; k++) {
	            System.out.print("*");
	        }
	        System.out.println();
	    }
	}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值