HM Day 04

HM Day 04

6-1

IntelliJ IDEA的安装与使用

安装之前要提前下载好安装包,步骤如下:
IDEA的项目project,模块module,包package的创建
    project(项目、工程)
        -- Module(模块)
            -- Package()
                -- Class()
                -- Class()
            -- Package()
                -- Class()
                -- Class()

        -- Module(模块)
            ...

在使用IDEA来创建Java项目的时候,一定要满足上面的目录结构,否则代码跑不起来。

IDEA创建项目

    1.创建项目
        Crete New Project-->在左边选择Empty Project --> Next--> 填写项目名称(BasiceCode)
        -->Finish
    2.创建模块
        点击+-->New Module--> Next --> 填写模块的名称(myModule) -->finish --> Applye And Ok
    3.在模块中创建包
        选中src目录右键-->New --> Package --> 填写包的名称 (com.itheima.demo)
    4.在包中新建类
        选中包文件夹右键-->New --> Class --> 写具体代码
    5.编译和运行
        编译:自动编译
        运行:
            1)点击main方法左边的绿色三角按钮
            2)右键-->Run

IDEA的快捷键

    psvm:  一键生成主方法
    sout:   生成输出语句
    ctrl+alt+L:	格式化代码
    alt+Enter:	代码修正提示
    (fn)+shift+f6:修改名称(类名、文件名、包名、变量名...)

    ctrl+/:	添加(取消)单行注释
    ctrl+shift+/ : 添加(取消)多行注释

    ctrl+D :  复制当前行的代码
    ctrl+X :  剪切
    ctrl+V :  粘贴

    alt+1:	打开/隐藏项目结构
    alt+4:	打开/隐藏控制台

    10.fori :  10次的for循环 

修改快捷键

如果你的快捷键用不了,就可以按照下面的步骤重置快捷键。

    File-->Setting(设置)-->keymap(快捷键)-->搜索想要的快捷键
        1.先移除原来的快捷键(remove shortcut)
        2.添加新的快捷键(add keyboard)

其他的配置

    1.设置主题
        File-->Setting(设置)-->Apperance-->Theme(主题)

    2.设置字体大小
        File-->Setting(设置)-->Editor(编辑)-->font(字体)-->size(大小)

    3.设置注释的颜色
        File-->Setting(设置)-->Editor(编辑)
            -->Color Schame-->Language Default-->Comments(注释)

    4.设置背景图片
         File-->Setting(设置)-->Apperance-->Background Image(背景图片)

在已有的项目中新建模块

点击工具栏右边的按钮,如图所示。新建新的模块

删除已有的模块

在项目的结构页面,点击 减号 就可以删除模块。但是需要到项目文件夹中,手动删除才能彻底删除模块。

关闭已有项目

File --> Close Project

数组

格式:数组的定义有两种格式

//数据类型[] 数组名; 
int[] array;

//数据类型 数组名[];
int array[];

数组的动态初始化

动态初始化的格式

//数据类型[] 数组名 = new 数据类型[长度];
int[] array = new int[3];

下面的格式也可以,但是不建议使用

//定义数组格式- 动态初始化
数据类型  数组名[]=new 数据类型[长度];
int  arrayA[]=new int[3]; //定义一个长度为3的数组,元素类型为int
byte arrayB[]=new byte[2]; //定义一个长度为2的数组,元素类型为byte

Java的内存分配

要点

- 这部分内容了解就行,目的是帮助我们更深入的理解数组的底层原理

学习素材

栈内存:存储局部变量(方法中的变量)
堆内存:new出来的数据 
方法区:存储字节码的信息
	HelloWorld.class (字节码文件,给JVM执行)

本地方法区:操作系统维护的内存区域
寄存器:给CPU使用的

一个数组的内存图解

两个数组的内存图解

每一个数组在堆内存中都有自己独立的空间,互不影响。

两个引用指向同一个数组

当两个引用指向同一个堆内存的地址,一个引用修改了堆内存中的数据,第二个引用去访问时数据已经被修改过了。

数组的静态初始化

静态初始化格式

//数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int[] array = new int[]{1,2,3,4,5,6};

//数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] array = {1,2,3,4,5,6};

数组中常见的问题

1.ArrayIndexOutOfBoundsException:  数组索引越界
	数组的最小索引是0,最大的索引是长度-1

2.NullPointerException: 空指针异常
	数组的变量,没有指向任何地址 

生成for循环的快捷方式:

    //遍历数组快捷键:数组名.fori    
    //数组的长度:array.length

HM Day 05

6-2

Java经典题型练习

1.斐波那契数列

package ClassicP1;
import java.util.Scanner;
/**
 * @Package: ClassicP1
 * @ClassName: test5
 * @Author: PC
 * @CreateTime: 2021/6/2 14:44
 * @Description: 斐波那契数列: 1   1	2	3	 5	 8	  13  21  34  55 ...
 * 求:斐波那契数列的第n个数是多少.
 * 通过观察发现规律:
 * 1.第一个数和第二个数都是1
 * 2.从第三个数开始,这个等于前面两个数之和
 * 分析思路:
 * 1.定义一个数组,数组的长度就是n
 * int[] array=new int[n];
 * 2.按照规律给数组中的元素赋值
 * array[0]=1;
 * array[1]=1;
 * 3. 是使用循环遍历从2索引开始的元素,给元素赋值
 * array[i]=array[i-1]+array[i-2];
 */
public class test5 {
    public static void main(String[] args) {
//        1,键入一个整数n
        System.out.println("~~~~~~~斐波那契数列~~~~~~");
        System.out.println("请输入一个数:");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if (n < 3) {
            System.out.println("斐波那契数列的第" + n + "个数是:" + 1);
        } else {
//        2,定义一个数组
            int[] arr = new int[n];
//        3,赋值
            arr[0] = 1;
            arr[1] = 1;
            int i = 2;
            while (i < n) {
                arr[i] = arr[i - 1] + arr[i - 2];
                i++;
            }
            System.out.println("斐波那契数列的第" + n + "个数是" + arr[n - 1]);
        }
    }
}

2,数组逆序(两种方式逆序)

package ClassicP1;
/**
 * @Package: ClassicP1
 * @ClassName: test4
 * @Author: PC
 * @CreateTime: 2021/6/2 14:07
 * @Description: 数组逆序 需求:把数组中的元素逆序,如{1,2,3,4,5},逆序之后{5,4,3,2,1}
 * 分析:
 * 新建一个数组把要输出的数组倒着输出,或者找个中间变量来接收;
 */
public class test4 {
    public static void main(String[] args) {
//        1,定义一个有序数组
        int[] arr = {1, 2, 3, 4, 5};
//        2,定义一个接受的数组(第一种方法)
        int[]arr1 = new int[arr.length];
//        3,第一种方法开始接收
//        int j = arr.length-1;
        for (int i= 0;i<arr.length;i++){
            arr1[j] = arr[i];
            j--;
        }
//        4,第二种方法利用一个中间变量来倒序接受
        int head = 0;
        int tail  =arr.length-1;
        while (head<tail){
            int temp = arr[head];
            arr[head] = arr[tail];
            arr[tail] =temp;
            head++;
            tail--;
        }
//       5,打印倒序的结果
        System.out.println("~~~~倒序数组~~~~");
//        第一种倒序结果
//        for (int i= 0;i<arr1.length;i++){
//            System.out.print(arr1[i]+"  ");
//        }
//        第二种倒序结果
        for (int i= 0;i<arr.length;i++){
            System.out.print(arr[i]+"  ");
        }
    }
}

3,折半查找

package ClassicP1;
import java.util.Scanner;
/**
 * @Package: ClassicP1
 * @ClassName: test3
 * @Author: PC
 * @CreateTime: 2021/6/2 11:21
 * @Description:折半查询
 ******** 前提是该数组必须是有序数组*************
 */
public class test3 {
    public static void main(String[] args) {
//        1,定义一个有序数组
        int []arr  ={1,2,3,4,5,6,7,8,9,10};
//        2,定义索引的头,尾和标记
        int head  =0;
        int tail =arr.length-1;
        int tab =-1;
//        3,键入需要查找的值
        System.out.println("~~~~~~~折半查找~~~~~~~");
        System.out.println("请输入你要查询的值:");
        Scanner sc = new Scanner(System.in);
        int key  =sc.nextInt();
        int mid = 0;
//        4,折半查找
        for (int i=0;i<arr.length;i++){
             mid = (head+tail)/2;//重新给中间量赋值
            if (key>arr[mid]){
                head = mid+1;
            }else if (key<arr[mid]){
                tail  = mid -1;
            }else{
                tab++;
                break;
            }
        }
        if (tab!=-1){
            System.out.println("你查找的值在第"+(mid+1)+"位");
        }else{
            System.out.println("抱歉,该数组没有你要查找的值");
        }
    }
}

4,打印九九乘法表

package ClassicP1;
/**
 * @Package: ClassicP1
 * @ClassName: test1
 * @Author: PC
 * @CreateTime: 2021/6/2 10:29
 * @Description: 打印九九乘法表
 * 1*1=1
 * 1*2=2   2*2=4
 * 1*3=3   2*3=6   3*3=9
 * ...
 * 1*9=1   2*9=18      ... 9*9=81
 */
public class test1 {
    public static void main(String[] args) {
        System.out.println("~~~~~九九乘法表~~~~~");
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                if (i == j) {
                    System.out.println(j+ "*" + i + "=" + i * j);
                } else {
                    System.out.print(j+ "*" + i+ "=" + i * j + "   ");
                }
            }
        }
    }
}

5,炸金花

package ArrayP1;
import java.util.Random;
/**
 * @Package: ArrayP1
 * @ClassName: demo6
 * @Author: PC
 * @CreateTime: 2021/6/1 20:34
 * @Description: 需求: 在炸金花游戏中,有54张扑克牌,每人发3张,
 * 然后比谁的牌大谁的牌小。 现在我们可以写代码完成随机发3张牌的要求
 * 实现步骤:
 * 1. 定义一个数组arr1,用来存储牌的点数
 * 思考🙄:牌的点数是固定的("A","2"..."10","J","Q","K"),用静态初始化好?还是动态初始化好?
 * 2. 定义一个数组arr2,用来存储牌的花色
 * 思考🙄:牌的花色是固定的("♥","♠","♣","♦"),用静态初始化好?还是动态初始化好?
 * 3. 定会一个数组arr3,长度为54,用来存储所有的牌(每一张牌包含花色+点数,如:"♥A","♦6")
 * 思考🙄:如何将每一种花色和点数组合成一张牌,并存到数组中
 * 思考🙄:大王和小王单独添加到数组中
 * 4. 定义一个数组arr4,长度为3,从arr3数组中随机的产生3个元素存储到arr4数组中(元素不能重复)
 * 5. 打印arr4中的每一个元素
 */
public class demo6 {
    public static void main(String[] args) {
        Random r = new Random();
//        1,定义一个数组arr1,用来存储牌的点数
        String[] c1 = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
//        2,定义一个数组arr2,用来存储牌的花色
        String[] c2 = {"♥", "♠", "♣", "♦"};
//        3,定义一个数组arr3,长度为54,用来存储所有的牌(包括大王和小王)
        String[] c3 = new String[54];
//        4,遍历
        int count = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 13; j++) {
                c3[count] = c2[i] + c1[j];
                count++;
            }
        }
        c3[52] = "大王";
        c3[53] = "小王";
//        5,定义一个arr4的数组,长度是3,用于接收随机抽到的三张牌
        String[] c4 = new String[3];
        int[] arr = new int[3];
//        6,接收三张牌,并筛选掉重复的牌
        for (int i = 0; i < 3; i++) {
            int random = r.nextInt(53);
//            ***************************关键的一步,加入标记判断是否有重合,而不是在里面直接赋值;*****
            int count1 = -1;
//            for (int j = 0; j < 3; j++) {
                *******另一个关键步骤,利用抽到的牌和手里的牌去作比较,从而确定抽到的三张牌不重复;*****
//                if (c4[random].equals(c4[j])) {
//                    count1++;
//                }
//            }
//            *******另一种方法:可以比较随机抽到的牌和存储在数组中的牌进行比较;
            for (int j = 0; j < 3; j++) {
                if (c3[random].equals(c4[j])) {
                    count1++;
                }
            }
            if (count1 != -1) {
                i--;
            }else{
                c4[i] = c3[random];
            }
        }
//        7,打印出随机抽到的三张牌
        System.out.println("~~~~~炸金花~~~~");
        System.out.println("你抽到的三张牌是:");
        for (int i = 0; i < 3; i++) {
            System.out.print(c4[i] + "  ");
        }
    }
}

6,人品计算器

package ArrayP1;
import java.util.Random;
import java.util.Scanner;
/**
 * @Package: ArrayP1
 * @ClassName: demo5
 * @Author: PC
 * @CreateTime: 2021/6/1 20:22
 * @Description:
 * 需求:定义一个字符串数组,用来存储可能出现的人品。然后键盘录入一个姓名,
 * 这里的姓名其实就起到掩人耳目的作用(让你以为是通过姓名算的),实际上是随机从人品数组中找的一个元素
 * 思路分析:
 *     1.定义一个字符串数组,存储人品信息,数组元素已经给你准备好了,直接复制就行。
 *                {
 *             "你的人品堪忧啊,多做善事吧",
 *             "我上辈子肯定欠你的,不要上我见到你,快走、快走....",
 *             "你印堂发黑,有血光之灾啊",
 *             "帅哥,感觉你要走桃花运啊,带带我呗",
 *             "迎娶白富美,走上人生巅峰",
 *             "你的人生巅峰,就是现在",
 *             "明天出门可能捡到钱",
 *             "好臭啊,感觉你踩到狗屎的🐶",
 *             "给你一个双色球号码 06 08 13 18 26 33 + 10 包中奖"}
 *     2.键盘录入一个姓名(仅仅只是录入一个姓名而已)
 *     3.随机从人品数组中,产生一个元素,并打印
 */
public class demo5 {
    public static void main(String[] args) {
        String[] s ={"你的人品堪忧啊,多做善事吧","我上辈子肯定欠你的," +
                "不要上我见到你,快走、快走....", "你印堂发黑,有血光之灾啊",
                "帅哥,感觉你要走桃花运啊,带带我呗", "迎娶白富美,走上人生巅峰",
                "你的人生巅峰,就是现在", "明天出门可能捡到钱", "好臭啊,感觉你踩到狗屎的🐶",
                "给你一个双色球号码 06 08 13 18 26 33 + 10 包中奖" };
        System.out.println("~~~请输入你的名字查询个人命运~~~");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        Random r= new Random();
        int destiny =r.nextInt(name.length());
        System.out.println("你的命运评语是:"+s[destiny]);
    }
}

7,随机点名器

package ArrayP1;
import java.util.Random;
/**
 * @Package: ArrayP1
 * @ClassName: demo4
 * @Author: PC
 * @CreateTime: 2021/6/1 20:13
 * @Description:点名器
 * 需求:定义一个数组,存储班级所有学生的姓名,然后随机的从数组中抽取一个元素并打印。
 * 姓名为同学们准备好了,直接拷贝就行
 * 	"彭思源","陈才","彭状","周巍","张武","汪颢","江源","王杰","陈晨","夏炎","张文晟","刘礼","郭荆","舒望","白迎暄",
 * 	"丁爽","刘亚","罗青濠","陈奕欣","王翔","余世豪","汪北川","刘刚丞","王凯","李陈林","蔡情原","毛俊辉","黄宏",
 * 	"陈卓","童亮","徐壮","龚旭","王震","袁立","孙逸杰","李子豪","杨勇","师杨","胡贻文","王志明","王志","王金宇",
 * 	"杨东","张宇","王云博","黄灿","王高林","程莱星"
 * 思路分析:
 *     1.元素都给你准备好了,定义数组,你觉得用【静态初始化】还是【动态初始化】呢?
 *     2.我们只学过随机产生一个整数,怎么从数组中随机找一个元素呢?
 *     	//提示:元素和索引是对应的,如果能够随机产生索引,是不是就随机产生了一个元素?
 *     3.通过索引获取元素,并打印
 */
public class demo4 {
    public static void main(String[] args) {
        String[] s = {"彭思源","陈才","彭状","周巍","张武","汪颢",
                "江源","王杰","陈晨","夏炎","张文晟","刘礼","郭荆",
                "舒望","白迎暄", "丁爽","刘亚","罗青濠","陈奕欣",
                "王翔","余世豪","汪北川","刘刚丞","王凯","李陈林",
                "蔡情原","毛俊辉","黄宏", "陈卓","童亮","徐壮","龚旭",
                "王震","袁立","孙逸杰","李子豪","杨勇","师杨","胡贻文",
                "王志明","王志","王金宇", "杨东","张宇","王云博","黄灿",
                "王高林","程莱星" };
        Random r =new Random();
        int luck = r.nextInt(s.length);
        System.out.println("~~~~~~随机点名器~~~~~~");
        System.out.println("这个幸运儿是:"+s[luck]);
    }
}

8,双色球彩票

package ArrayP1;
import java.util.Random;
/**
 * @Package: ArrayP1
 * @ClassName: demo3
 * @Author: PC
 * @CreateTime: 2021/6/1 19:43
 * @Description:
 * 需求:双色球彩票由6个红球(1~33的整数)和1个蓝球(1~16的整数)组成。
 * 实现步骤:
 *     1.定义一个长度为7的数组,前6个存储红球,最后一个存储蓝球
 *     2.随机产生6个红球和1个篮球,存储到数组中
 *     3.遍历数组中的每一个元素,打印格式如下:
 *       双色球开奖号码:6,3,8,13,16,32+16
 */
public class demo3 {
    public static void main(String[] args) {
//      1.定义一个长度为7的数组,前6个存储红球,最后一个存储蓝球
        int[] result =new int[7];
        Random r =new Random();
//        2,抽六个红球并保存到数组
        for (int i =0;i<6;i++){
            int num1  = r.nextInt(32)+1;
//            设置一个判定条件
            int count = -1;
            for (int j=0;j<6;j++){
                if (num1==result[j]){
                    count++;
                }
            }
            if (count==-1){
                result[i] = num1;
            }else{
                i--;
            }
        }
//        3,抽一个篮球并保存到数组
        int num2 = r.nextInt(15)+1;
        result[6] = num2;
//        4,打印中将的双色球号码
        System.out.println("~~~~~~本期中将的双色球号码~~~~~~~");
        for (int i = 0;i<7;i++){
            if (i==6){
                System.out.println(result[i]);
            }else{
                System.out.print(result[i]+" ");
            }
        }
    }
}

9,评委打分

package ArrayP1;
import java.util.Scanner;
/**
 * @Package: ArrayP1
 * @ClassName: Demo
 * @Author: PC
 * @CreateTime: 2021/5/31 11:55
 * @Description:
 * 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数。
 * 选手的最后得分为:去掉一个最高分和一个最低分的4个评委的平均值(不考虑小数部分)。
 * 数组的练习;
 * 分析: 1 ·首先定义一个数组用于接收键盘录入的打分成绩和分数之和sum;
 * 2遍历,用for循环找到max和min值
 * 3根据题目要求计算平均值;
 */
public class Demo {
    public static void main(String[] args) {
        //1 ·首先定义一个数组用于接收键盘录入的打分成绩和分数之和sum;
        Scanner sc = new Scanner(System.in);
        int sum = 0;
        int[] arr = new int[6];
        //2.遍历,接受键盘输入的分值;
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位评委的打分:");
            int score = sc.nextInt();
            //3,判断输入分值是否合法
            if (score >= 0 && score <= 100) {
                arr[i] = score;
                sum += arr[i];
            } else {
                System.out.println("你的输入有误!请重新输入");
                i--;
            }
        }
        //4,求最大值max和最小值min;
        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        //5,根据要求计算平均值;
        int resault = 0;
        resault = (sum - max - min) / 4;
        System.out.println("~~~~~评委评分结果~~~~~");
        System.out.println("评委的平均分为:" + resault);
    }
}

                System.out.println("你的输入有误!请重新输入");
                i--;
            }
        }
        //4,求最大值max和最小值min;
        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        //5,根据要求计算平均值;
        int resault = 0;
        resault = (sum - max - min) / 4;
        System.out.println("~~~~~评委评分结果~~~~~");
        System.out.println("评委的平均分为:" + resault);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值