程序员

课后作业day09_java循环/排序/查找基础

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

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