java循环 排序 查找

165 阅读5分钟

一、循环、排序、查找基础练习

1.求1~100奇数和偶数的和

  • 代码:
public class OddOrEvenSum {
	public static void main(String[] args) {
		int oddSum = 0;		//奇数之和
		int evenSum = 0;	//偶数之和
		for (int i = 1 ; i <= 100 ; i ++) {
			if (i % 2 == 1) {//判断奇数
				oddSum += i ;
			}else{		//不是奇数就是偶数
				evenSum += i;
			}
		}
		System.out.println("1~100之内奇数的和是: " + oddSum);
		System.out.println("1~100之内偶数的和是: " + evenSum);
	}
}
  • 运行结果:
    28882181.png

2.求水仙花数

  • 代码:
public class NarcNumber {
	public static void main(String[] args) {
		for (int i = 100 ; i <= 999 ; i ++ ) {
			int unit = i % 10;			//个位数
			int decade= i / 10 % 10;	//十位数
			int hundreds = i / 100;		//百位数
			int sum = unit * unit * unit + decade * decade * decade + hundreds * hundreds * hundreds;
			if (sum == i) {				//判断各个位数的立方和是否等于数的本身
				System.out.println(i);	//打印水仙花数
			}
		}
	}
}
  • 运行结果:
    29715897.png

3.打印26的大小写字母

  • 代码:
public class PrintA_Z_a_z {
	public static void main(String[] args) {
		for (char a = 'a'; a <= 'z'; a ++) {
			System.out.print(a + " ");
		}
		System.out.println();

		for (char b = 'A'; b <= 'Z';b ++) {
			System.out.print(b + " ");
		}
		System.out.println();
	}
}
  • 运行结果:
    30060784.png

4.打印9*9乘法表

  • 代码:
public class MulList {
	public static void main(String[] args) {
		for (int i = 1;i <= 9; i ++) {
			for (int j = 1;j <= i; j ++) {
				System.out.print(j + " * " + i + " = " + j * i + "  ");
				if (i * j < 10) {	//多一个空格保证打印整齐
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}
  • 运行结果:
    30184773.png

5.任意写一个数组,赋值,然后打印数组逆序后结果

  • 代码:
public class ReversalArray {
	public static void main(String[] args) {
		int[] arr = {1,23,12,11,66,34};
		arrReversal(arr);
		arrPrint(arr);
	}

	public static void arrReversal(int[] arr) {
		for (int max = arr.length - 1 , min = 0;min <= max; min ++,max --) {
			int temp = arr[min];
			arr[min] = arr[max];
			arr[max] = temp;
		}
	}

	public static void arrPrint(int[] arr) {
		if (arr == null) {
			System.out.println("数组为空");
			return;
		}
		System.out.print("[");
		for (int i = 0 ; i < arr.length - 1; i ++) {
			System.out.print(arr[i] + ",");
		}
		System.out.println(arr[arr.length - 1] + "]");
	}
}
  • 运行结果:
    30860055.png

6.练习排序算法

a.选择排序

  • 代码:
public class SelectSort {
	public static void main(String[] args) {
		int[] arr = {9,12,3,4,13,6};	//静态初始化数组
		selectSort(arr);	//调用选择排序方法
		arrPrint(arr);		//调用打印数组方法
	}

	public static void selectSort(int[] arr) {
		for (int i = 0;i < arr.length - 1; i ++) {
			for (int j = i + 1 ; j < arr.length ; j ++) {
				if (arr[j] < arr[i]) {	//如果前一个数比后一个数小则交换这两个数
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
	}

	public static void arrPrint(int[] arr) {
		System.out.print("[");
		for (int i = 0 ; i < arr.length-1 ; i ++) {
			System.out.print(arr[i] + ",");
		}
		System.out.println(arr[arr.length - 1] + "]");	
	}
}
  • 运行结果:
    31967288.png

b.冒泡排序

  • 代码:
public class BubbleSort {
	public static void main(String[] args) {
		int[] arr = {9,12,3,4,13,6};
		bubbleSort(arr);
		arrPrint(arr);
	}

	public static void bubbleSort(int[] arr) {
		for (int i = 0 ; i < arr.length - 1 ; i ++) {
			for (int j = 0 ; j < arr.length - 1 - i; j ++) {
				if (arr[j + 1] < arr[j]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}

	public static void arrPrint(int[] arr) {
		if (arr == null) {
			System.out.println("数组为空");
			return;
		}
		System.out.print("[");
		for (int i = 0 ; i < arr.length - 1; i ++) {
			System.out.print(arr[i] + ",");
		}
		System.out.println(arr[arr.length - 1] + "]");
	}
}
  • 运行结果:
    32530810.png

7.折半查找

  • 代码:
public class BinarySearch {
	public static void main(String[] args) {
		int[] arr = {1,2,4,10,11};	//静态定义数组
		System.out.println(binarySearch(arr,4));
	}

	public static int binarySearch(int[] arr,int key) {
		int min = 0;	//定义数组最小索引
		int max = arr.length - 1;	//定义数组最大索引
		int mid = 0;	//如果写成int mid = (min + max) / 2,mid变成一个常量
		while (min <= max) {
			mid = (min + max) / 2;
			if (key > arr[mid]) {	//如果查找的值比中间的数大
				min = mid + 1;		//将中间索引+1赋值给最小索引
			}else if (key < arr[mid]) {		//如果查找的值比中间的数小
				max = mid - 1;				//将中间索引-1赋值给最大索引
			}else{							//否则查找到了
				return mid;					//返回中间索引号
			}
		}
		return -1;		//循环后没有查询到指定的数,返回-1
	}
}
  • 运行结果:
    33301471.png

二、拓展练习

1.按照25个一行从大到小的顺序打印所有四位整数中个位+十位=百位+千位的整数

(线索:循环(9999到1000)、计数器控制换行(计数器%5==0))

  • 代码:
public class KiloEqual {
	public static void main(String[] args) {
		int count = 0;		//定义一个计数器
		for (int i = 9999; i >= 1000; i --) {	//反向遍历1000~9999
			int unit = i % 10;				//个位数
			int decade = i / 10 % 10;		//十位数
			int hundreds = i / 100 % 10;	//百位数
			int kilo = i / 1000;			//千位数
			if (unit + decade == hundreds + kilo) {		//如果个位+十位=百位+千位
				System.out.print(i + " ");				//打印出符合要求的数
				count ++;								//计数器+1
				if (count % 25 == 0) {					//每5行换行打印
					System.out.println();
				}
			}
		}
	}
}
  • 运行结果:
    37538707.png

2.倒着打印九九乘法表

  • 代码:
public class ReverseMulList {
	public static void main(String[] args) {
		for (int i = 1;i <= 9; i ++) {
			for (int j = 9;j >= i ; j --) {
				System.out.print(j + " * " + i + " = " + i * j + "  ");
				if (i * j < 10) {	//多一个空格保证打印整齐
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}
  • 运行结果:
    37858821.png

3.分析以下需求,并用代码实现:(扩展)

(1)键盘录入6个int类型的数据存数数组arr中 (2)将arr数组中的内容反转 (3)将翻转后的数组角标为奇数的互相交换 1和3换, 3和5换,以此类推 例如: int[] arr={16,4,5,7,9,11} 反转:arr={11,9,7,5,4,16} 奇数的互相交换: arr={11,5,7,16,4,9}

  • 代码:
import java.util.Scanner;
public class FancyArrayReverse {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[6];		//动态定义一个整型数组,有6个元素
		System.out.println("请输入6个数整数:");
		for (int i = 0 ; i < 6 ; i++) {		//键盘录入6个整数
			System.out.println("第 " + (i + 1) + "个整数");
			arr[i] = sc.nextInt();
		}
		System.out.println("数组内容");
		arrPrint(arr);				//打印数组
		System.out.println("反转数组");
		arrReverse(arr);			//反转数组
		arrPrint(arr);				//数组反转后打印
		System.out.println("花式反转数组");
		fancyArrayReverse(arr);		//奇数索引的数进行反转
		arrPrint(arr);				//花式反转后打印数组
	}

	public static void arrReverse(int[] arr) {		//反转数组方法
		for (int min = 0,max = arr.length -1 ; min <= max ; min ++,max --) {
			int temp = arr[min];
			arr[min] = arr[max];
			arr[max] = temp;
		}
	}

	public static void fancyArrayReverse(int[] arr) {		//花式反转数组方法
		for (int i = 1; i < arr.length - 2 ; i += 2 ) {
			int temp = arr[i];
			arr[i] = arr[i + 2];
			arr[i + 2] = temp;
		}
	}

	public static void arrPrint(int[] arr) {		//打印数组方法
		if (arr == null) {
			System.out.println("数组为空");
			return;
		}
		System.out.print("[");
		for (int i = 0 ; i < arr.length - 1; i ++) {
			System.out.print(arr[i] + ",");
		}
		System.out.println(arr[arr.length - 1] + "]");
	}
}
  • 运行结果:
    37284238.png