12.7 Java基础7

  • 昨天作业讲解及修改

英中天气转换器

import java.util.Scanner;

/**
 * 天气转换器 大小写字母都可以
 * 
 * @author Administrator
 *
 */
public class Test_Review_Homework {

    public static void main(String[] args) {

        // 实现一个简单的英中天气转换器:输入表1中天气状况英文单词的第一个字母,根据输入来判断天气状况,
        // 并输出天气的中文形式。用户可重复输入进行转换,输入n退出系统。
        Scanner input = new Scanner(System.in);
        String a;
        String choice = "y";

        do {
            System.out.println("请输入天气状况的第一个字母");
            a = input.next();
            switch (a) {
            case "D":
            case "d":
                System.out.println("干燥");
                break;
            case "M":
            case "m":
                System.out.println("潮湿");
                break;
            case "H":
            case "h":
                System.out.println("炎热");
                break;
            case "R":
            case "r":
                System.out.println("下雨");
                break;
            }
            System.out.println("是否继续:(y/n)");
            choice = input.next();
        } while (choice.equals("y") || choice.equals("Y")); // choice.equalsIgnoreCase("y")

        System.out.println("已退出系统");

    }
}

我原本用的while和switch嵌套,不过老师说用do...while至少执行一次更好。。还有我没有考虑到用户可能输入小写。

 

完数

/**
 * 一个数如果恰好等于他的因子之和,这个数就称为“完数”。例如6=1+2+3,找出1000以内的所有完数。
 * 
 * 
 * 6 = 1*6 6 = 2*3 6= 3 *2 我们就说: 1 2 3 都是6的因子 ; 6 = 1+2+3
 * 
 * @author Administrator
 *
 */
public class Test_Review_Homework2 {

    public static void main(String[] args) {
        // 这里i就是我们要判断是否 i = xx+xx+xx+xx...;
        for (int i = 1; i < 1000; i++) {
            int sum = 0;
            // 求i的因子
            for (int j = 1; j < i; j++) {
                // 用i去模j
                if (i % j == 0) {
                    // 此时是因子
                    // System.out.println(j);
                    sum += j;
                }
            }
            // 判断
            if (sum == i) {
                System.out.println("完数:" + i);
            }
        }
    }
}

  • 数组的基础回顾

多数据存储,类型相同,一组数据的集合
下标,中括号
创建 类型 [] 名字= new 类型[长度]
创建 类型 [] 名字= new 类型[]{1,2,3}
创建 类型 [] 名字= {1,2,3} CP: 数组和循环
下标从0开始,到长度-1结束。

  • 求数组元素最大值最小值

import java.util.Scanner;

/**
 * @多数据存储,类型相同,一组数据的集合
 * @下标,中括号
 * @创建 类型 [] 名字= new 类型[长度]
 * @创建 类型 [] 名字= new 类型[]{1,2,3}
 * @创建 类型 [] 名字= {1,2,3} CP: 数组和循环
 * @下标从0开始,到长度-1结束
 * @author Administrator
 *
 */
public class Max {

    public static void main(String[] args) {
        // 定义数组保存5个学生的成绩
        int[] arr = new int[5];
        // 提示用户输入
        Scanner input = new Scanner(System.in);
        System.out.println("请输入5个学生的成绩");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
        }
        // 假设第一个元素为最大值[一定是在赋值之后]
        int max = arr[0];
        // 输出
        // 1普通for循环
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        // 输出最大值
        System.out.println("5个学生的成绩最高分为" + max);
    }
}

 

import java.util.Scanner;

/**
 * @多数据存储,类型相同,一组数据的集合
 * @下标,中括号
 * @创建 类型 [] 名字= new 类型[长度]
 * @创建 类型 [] 名字= new 类型[]{1,2,3}
 * @创建 类型 [] 名字= {1,2,3} CP: 数组和循环
 * @下标从0开始,到长度-1结束
 * @author Administrator
 *
 */
public class Min {

    public static void main(String[] args) {
        // 定义数组保存5个学生的成绩
        int[] arr = new int[5];
        Scanner input = new Scanner(System.in);
        // 提示用户输入
        System.out.println("请输入5个学生的成绩");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
        }
        // 假设第一个元素为最小值[一定是在赋值之后]
        int min = arr[0];
        // 输出
        // 1普通for循环
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                // 就证明array[i]比min比小
                min = arr[i];
            }
        }
        // 输出最小值
        System.out.println("5个学生的成绩最低分为" + min);
    }
}

  • 求和与平均值

import java.util.Scanner;

/**
 * @多数据存储,类型相同,一组数据的集合
 * @下标,中括号
 * @创建 类型 [] 名字= new 类型[长度]
 * @创建 类型 [] 名字= new 类型[]{1,2,3}
 * @创建 类型 [] 名字= {1,2,3} CP: 数组和循环
 * @下标从0开始,到长度-1结束
 * @author Administrator
 *
 */
public class SumAndAverage {

    public static void main(String[] args) {
        int[] arr = new int[3];
        Scanner input = new Scanner(System.in);
        // 提示用户输入
        System.out.println("请输入3个数字");
        double sum = 0;// 和double做运算得到的类型仍是double
        // 数组赋值
        for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();// 不是单个数字,用变量接收只能得到一个
            // 累加
            sum += arr[i];
        }
        // 输出和与平均值
        System.out.println("sum:" + sum + ",average:" + (sum / arr.length));
        input.close();
    }
}

  • 冒泡排序

import java.util.Arrays;

/**
 * {1,2,3,4,5,6}数组长度为6,比较5轮,每轮比较的次数都比上一轮少5 4 3 2 1
 *                                            6-1-0 6-1-1 6-1-2 6-1-3 6-1-4    
 * @author Administrator
 *
 */
public class Bubble {

    public static void main(String[] args) {
        int[] arr = { 10, 35, 8, -9, 0, 1, 16 };
        for (int i = 0; i < arr.length - 1; i++) {// 外循环控制比较的轮数[长度-1]
            int c = 0;// 定义c为计数器
            for (int j = 0; j < arr.length - 1 - i; j++) {// 内循环控制每轮比较的次数
                if (arr[j] > arr[j + 1]) {
                    c++;
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    System.out.println("第" + (i + 1) + "轮第" + c + "次交换后数组为: " + Arrays.toString(arr));
                }
            }
        }
        for (int i : arr) {
            System.out.print(i + " ");
        }
        for (int i = 0; i < arr.length - 1; i++) {// 外循环控制比较的轮数[长度-1]
            for (int j = 0; j < arr.length - 1 - i; j++) {// 内循环控制每轮比较的次数
                if (arr[j] < arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println("\n***************");
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}

  • 选择排序

/**
 * 选择排序 先从无序列表中选出最小值,然后和最左边的做交换
 * 选择排序的主要思想是寻找未排序中最小的元素加入到已有序列,
 * 直到未排序序列为空。
 * 有一无序数组,如下,现按照选择排序的规则进行升序排序:

 * @author Administrator
 *
 */
public class ChoiceSort {

    public static void main(String[] args) {
        int[] array = { 23, 45, 67, -98, 55, 101 };
        int smaller;
        for (int i = 0; i < array.length - 1; i++) {// 最后一个元素不用比
            smaller = i;
            for (int j = i + 1; j < array.length; j++) {// 不和自己比较
                if (array[smaller] > array[j]) {
                    smaller = j;
                }
            }
            if (smaller != i) {// 相等意味着i下标的元素为最小,不相等意味着不是最小要做交换
                int tempData = array[smaller];
                array[smaller] = array[i];
                array[i] = tempData;
            }
        }
        for (int i : array) {
            System.out.print(i + " ");
        }
    }
}

  • 二维数组

可以以九宫格的行列来理解二维数组(行为一维数组的索引,列为二维数组的索引)

/**
 * @二维数组的定义
 * @author Administrator
 *
 */
public class Test_Array_Array_01 {

    public static void main(String[] args) {

        // 第一个[]行 第二个[] 列
        int[][] array = new int[3][3];

        // 访问数名[行索引][列的索引]
        // [3][3] 行索引 0 1 2
        // 列的索引 0 1 2
        array[0][0] = 1;
        array[0][1] = 2;
        array[0][2] = 3;
        // ArrayIndexOutOfBoundsException: 3
        // array[0][3] = 4;

        array[1][0] = 1;
        array[2][1] = 2;
        // 这里行的索引只能是0 1 2
        // array[3][2] = 3;
    }
}

 

/**
 * @二维数组的定义
 * @author Administrator
 *
 */
public class Test_Array_Array_02 {
    public static void main(String[] args) {

        //第一个[]行 第二个[] 列 长度
        //可以不指定列长度
        //但这种强烈不推荐.
        int[][] array = new int[3][];
        
        //访问数名[行索引][列的索引]
        //NullPointerException 空指针异常
        //引用类型
//        array[0][0] = 1;
        
        array[0] = new int [3];
        
        array[0][0] = 1;
        array[0][1] = 1;
        array[0][2] = 1;
    }
}

 

public class Test_Array_Array_03 {

    public static void main(String[] args) {

        // 第一个[]行 第二个[] 列 长度
        // 可以不指定列长度
        // 强烈不推荐.
        int[][] array1 = new int[][] { { 1, 2 }, { 4, 5 }, { 7, 8 } };

        // 第一维的长度
        System.out.println(array1.length);//3

        int[][] array2 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

        System.out.println(array2[2][0]);
    }
}

  • 练习:杨辉三角

public class YangHuiTriangle {

    public static void main(String[] args) {
        int[][] array = new int[10][10];
        for (int i = 0; i < 10; i++) {// 行 向右为正
            for (int j = 0; j <= i; j++) {// 列 向下为正
                if (j == 0 || i == j) {//规律
                    array[i][j] = 1;
                } else {
                    array[i][j] = array[i - 1][j] + array[i - 1][j - 1];//规律
                }
                System.out.print(array[i][j] + "\t");
            }
            System.out.println();// 换行
        }
    }
}

感想:今天学的略微难了些,不过也都还可以理解。。画图,或者列出数组找规律都可以得出相关办法。只是冒泡排序和选择排序的一些步骤写的时候要小心,切不可张冠李戴。

18:30:57 2021-12-07

posted on 2021-12-07 18:30  heyiyang1312  阅读(62)  评论(0)    收藏  举报

导航