一、循环、排序、查找基础练习
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);
}
}
- 运行结果:
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); //打印水仙花数
}
}
}
}
- 运行结果:
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();
}
}
- 运行结果:
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();
}
}
}
- 运行结果:
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] + "]");
}
}
- 运行结果:
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] + "]");
}
}
- 运行结果:
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] + "]");
}
}
- 运行结果:
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
}
}
- 运行结果:
二、拓展练习
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();
}
}
}
}
}
- 运行结果:
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();
}
}
}
- 运行结果:
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] + "]");
}
}
- 运行结果: