JavaSE学习day6 进制转换和idea的调试

news2025/2/27 21:16:33

1.进制

1.1 常见的进制分类(掌握)

学过计算机组成原理的同学可以跳过这里。

  • 二进制

  • 十进制

  • 八进制

  • 十六进制

1.2 二进制

计算机数据在底层存储和运算的时候,都是以二进制的形式操作的,了解不同的进制,便于我们对数据的运算过程理解的更加深刻。

二进制数据是用0和1两个数码来表示。例如:0101000。进位规则是“逢二进一”,借位规则是“借一当二”。

练习:

思考一下,十进制中的0,1,2,3,4在二进制中如何表示:

十进制中的0 --->  二进制中的表现形式 0
十进制中的1 --->  二进制中的表现形式 1
十进制中的2 --->  二进制中的表现形式 10
十进制中的3 --->  二进制中的表现形式 11
十进制中的4 --->  二进制中的表现形式 100
十进制中的5 --->  二进制中的表现形式 101   

扩展1:(了解)

计算机的底层不管是数字还是图片,还是字母,还是汉字,还是音频,还是视频,都是以二进制的形式来存储的。

数字:123,直接转成二进制来存储的。

字母:'a' 会先到ASCII码表中查询对应的数字,再变成二进制进行存储。

其他的就业班IO流章节会再次学习。这是个重点,提前先说一下。

扩展2(掌握):

存储的单位

在计算机中,存储的时候,都是以二进制的形式来存储的。

其中一个0或者1个1,我们会叫做一个bit位,比特位。

在二进制中,一个0或者一个1,能存储的信息太少了。

所以,我们一般会把8个二进制分为一组,这个单位叫做字节,而字节也是计算机中最小的存储单元。

0000 0000 1个字节

1024 字节 = 1KB

1024 KB = 1MB

1024 MB = 1GB

1024 GB = 1TB

扩展3:

byte 在底层 占用1个字节(掌握的)

short 在底层 占用2个字节(掌握的)

int 在底层占用 4个字节(掌握的)

long 在底层占用 8 个字节(掌握的)

隐式转换的底层原理:(了解)

byte b = 10; 在计算机的底层中是这样的: 0000 1010

int i = b; 此时把一个取值范围小的,给取值范围大的,触发隐式转换。(前面补0)

0000 0000 0000 0000 0000 0000 0000 1010

强制转换的底层原理:(了解)

int i = 10; 在计算机的底层中是这样的:0000 0000 0000 0000 0000 0000 0000 1010

byte b = (byte)i; 就会把前面不要的0给去掉了,只留下最后8位: 0000 1010

强制转换有可能导致数据发生错乱:(了解)

int i = 300;在计算机的底层中是这样的:00000000 00000000 00000001 00101100

byte b = (byte)i; 就会把前面三个字节给去掉了,只留下最后8位:00101100

这个时候,再转成十进制就是:44

扩展4:(了解)

在二进制中:第一位是符号位,0为正数 1为负数(学过计算机组成原理就知道)

byte是有取值范围:-128 ~ 127

其实就是因为byte是一个字节的原因:

127:0111 1111

-128:1000 0000(规定的)

以上的这些的内容,都是局限于正数的情况,负数的情况会更加复杂

如果有兴趣,大家可以学习原码反码补码甚至移码,学了这几个码就什么都清楚了。建议看一下计算机组成原理

1.3 十进制

现实生活中是进制。

十进制数据是用0,1,2,3,4,5,6,7,8,9来表示。例如:1234。进位规则是“逢十进一”,借位规则是“借一当十”。

1.4 八进制

由于二进制太长了,为了方便使用,所以有了八进制,把二进制中每三个看成一组,就是八进制。

十进制数据是用0,1,2,3,4,5,6,7来表示。例如:1234567。

1.5 十六进制

由于二进制太长了,为了方便使用,所以有了十六进制,把二进制中每四个看成一组,就是十六进制。堆内存中的地址值就是以十六进制的形式来体现的。

十六进制数据是用0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f来表示。例如:12ab。

其中a表示10,b表示11,c表示12,d表示13,e表示14,f表示15

1.6 代码中不同进制的书写格式(掌握)

十进制:Java中,数值默认都是10进制,不需要加任何修饰。
二进制:数值前面以0b开头,b大小写都可以。
八进制:数值前面以0开头。
十六进制:数值前面以0x开头,x大小写都可以。

1.7 进制之间的转换(了解)

1.7.1 任意进制到十进制的转换(了解)

公式:系数 * 基数的权次幂 再相加。

  • 系数:每一【位】上的数

  • 基数:几进制,就是几

  • 权:从数值的右侧,以0开始,逐个+1增加

1.7.1 十进制到任意进制的转换(了解)

公式:除基取余

使用源数据,不断的除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。

1.7.2 8421快速转换法(了解)

8421码又称BCD码,是BCD代码中最常用的一种

BCD: (Binary-Coded Decimal‎) 二进制码十进制数

在这种编码方式中,每一位二进制值的1都是代表一个固定数值,把每一位的1代表的十进制数加起来得到的结果就是它所代表的十进制数。

2.Debug模式(掌握)(超级重点)

2.1什么是Debug模式

是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。

2.2Debug模式操作流程

  • 如何加断点

    • 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可

    细节:

    每一个方法的第一行有效语句前面打上断点,而且一个方法,只打一个。

  • 如何运行加了断点的程序

    • 在代码区域右键Debug执行

    或者点击右上角的小虫子也可以进入调试模式:

  • 看哪里

    • 看Debugger窗口:

    Frames可以理解为一个方法栈,每当进入一个方法时,这个窗口就会显示在哪个方法,而当这个方法调用结束后,就会弹出这个栈,栈的特点就是先进后出

    • 看Console窗口:

    这个窗口就是打印窗口,输出或者输入语句都在这个窗口里进行。

  • 点哪里

    • 点Step Into (F7)这个箭头,也可以直接按F7:

  • 如何删除断点

    • 选择要删除的断点,单击鼠标左键即可

    • 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除,如图先找到这个两个重叠圆的按钮点击

    点击后如下图:然后点击那个减号“—”即可清楚全部断点。

2.3 debugder断点调试的细节

1.断点调试可以控制程序一步一步的运行,停在背景色变深的那行代码

2.断点调试不会回到上一步。

3.如果在断点调试中涉及打印语句,会把结果输出到控制台上面

4.如果在断点调试中涉及键盘录入,那么必须要到控制台输入数字,否则断点调试无法向下运行

3.基础练习(以下练习是锻炼编程的好练习,建议手动完成)

3.1 练习1求和(掌握)

有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。

求出该数组中满足要求的元素和,要求是:求和的元素个位和十位都不能是7,并且只能是偶数。

代码示例:

//1.定义数组
int[] arr = {68,27,95,88,171,996,51,210};
//定义求和变量
int sum = 0;
//2.遍历数组得到每一个元素
for (int i = 0; i < arr.length; i++) {
    //条件一:个位不能是7
    //条件二:十位不能是7
    //条件三:只能是偶数
    //先获得个位
    int ge = arr[i] % 10;
    //再获得十位
    int shi = arr[i] / 10 % 10;
    if(ge != 7 &&  shi != 7 && arr[i] % 2 ==0){
        sum = sum + arr[i]; //+=
    }
}
//3.打印输出
System.out.println(sum);

3.2 练习2 定义数组添加元素(掌握)

将10 – 20 之间能被5整除的数存入到数组当中,并遍历这个数组。

代码示例:

//静态 知道所有元素
//动态 不知道所有元素,但是知道要存几个
​
//如果上面的两种方式我都不知道
//思想:先确定长度,再创建数组
​
//1.先确定数组的长度
int count = 0;
for (int i = 10; i <= 20; i++) {
    if(i % 5 == 0){
        count++;
    }
}
//当循环结束之后,数组的长度就可以确定了
//2.创建数组
int[] arr = new int[count];
//3.把符合要求的元素,添加到数组当中
int index = 0;
for (int i = 10; i <= 20; i++) {
    if(i % 5 == 0){
        //把i存入数组
        arr[index] = i;
        index++;
    }
}
//4.遍历
for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
}

这道题要注意一下这条语句:int[] arr = new int[count]; 这条语句是动态创建数组,什么是数组动态初始化,忘记的同学可复习一下前面的内容。在java语言中是可以用变量作为数组的长度的,但是在C语言中是不能用变量作为数组的长度的,如下:

发现报错了,因此在C语言中是不能用变量来作为数组长度

3.3 练习3 判断是否为质数(掌握)

判断101~200之间有多少个质数,并打印出所有质数

代码示例:

int countA = 0;
for (int number = 101; number <= 200; number++) {
    //统计有多少个数字能被number整除
    int countB = 0;
    for (int i = 2; i < number; i++) {
        //判断i是否可以被number整除
        if(number % i == 0){
            countB++;
            break;
        }
    }
    if(countB == 0){
        System.out.println(number + "是质数");
        countA++;
    }/*else{
                System.out.println(number + "不是质数");
            }*/
}
//此时就表示这个范围里面所有的数字都已经判断完毕
System.out.println(countA);

3.4 练习4随机点名器(掌握)

键盘录入班级人数, 根据班级人数录入班级学员姓名

从录入的学员姓名中, 随机取出一个, 并打印在控制台

代码示例:

//1.键盘录入班级的人数
Scanner sc = new Scanner(System.in);
System.out.println("请输入班级的人数");
int number = sc.nextInt();
//2.根据人数来创建数组
String[] arr = new String[number];
//3.键盘录入姓名并存入数组
//录入整数:nextInt  录入小数:nextDouble 录入字符串 next
for (int i = 0; i < arr.length; i++) {
    System.out.println("请输入学生的姓名");
    String name = sc.next();
    //把name添加到数组当中
    arr[i] = name;
}
//4.随机抽取
//随机抽取一个索引,再通过索引获取姓名
Random r = new Random();
int index = r.nextInt(arr.length);
//5.根据索引获取姓名
String name = arr[index];
System.out.println("本次的幸运观众为:" + name);

3.5 练习5 评委打分(掌握)

需求:

在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。

代码示例:

public class Test13 {
    public static void main(String[] args) {
        //1.定义数组存入6个评委的打分
        int[] arr = new int[6];
        //2.生成6个数字,存入数组当中  0~100
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; ) {
            System.out.println("请输入第" + (i + 1) + "个评委的打分");
            int score = sc.nextInt();
            if (score >= 0 && score <= 100) {
                //只有当分数在范围之内,才会添加到数组当中
                arr[i] = score;
                //只有添加成功之后,那么索引才会发生变化
                i++;//这个语句是这个题目的精华部分
            } else {
                System.out.println("分数超出范围");
                continue;
            }
        }
        //3.求平均分
        int sum = getSum(arr);
        int max = getMax(arr);
        int min = getMin(arr);
        int avg  = (sum - max - min)/(arr.length - 2);
        System.out.println(avg);
    }
​
    //1.我要干嘛? --- 求和
    //2.需要什么? --- 数组
    //3.调用处是否需要继续使用结果? 必须返回
    public static int getSum(int[] arr){//求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum + arr[i]; //+=
        }
        return sum;
    }
​
    public static int getMax(int[] arr){//求最大值
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
​
    public static int getMin(int[] arr){//求最小值
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] < min){
                min = arr[i];
            }
        }
        return min;
    }
}

这个题要仔细吸收,尤其是i++那个语句(见代码红色注释那里),实在是经典

3.6 练习6 数字加密(掌握)

需求:

某系统的数字密码,比如1983,采用加密方式进行传输,

规则如下:

  • 先得到每位数,

  • 然后每位数都加上5 ,

  • 再对10求余,

  • 最后将所有数字反转,得到一串新数。

代码示例:

public class Test14 {
    public static void main(String[] args) {
        //1.直接把这个数字以数组的形式体现
        int[] arr = {1, 9, 8, 3};
        //2.每一位都+5
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;//+=
        }
        //3.对10取余
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] % 10;
        }
        //4.反转
        for (int left = 0, right = arr.length - 1; left < right; left++, right--) {
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
        
        //5.遍历打印
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
​
    }
}

这道题的那个循环数组转置的代码实在是太漂亮了,之前都是新建变量进行调换,但是这个代码言简意赅而且好懂,有必要记一下这个代码的精髓。该反转代码精装版如下:

这个代码非常漂亮,也就是转置这个代码有必要记一下这种思想。是真的漂亮

3.7 练习7 打印形状(掌握)

题目本身没有什么特殊的意义,为了锻炼大家循环嵌套的能力

思路分析:

对于任意的一种有规则的图形,我们可以把他们拆成矩形,正三角形和倒三角形,然后再组合在一起。

所以,我们要会先打印基础形状

需求1:打印矩形(掌握)

//目的:
//为了锻炼大家循环嵌套的能力而已
​
//把在一行打印5个*这件事情,重复了5次
//决定了行数
for (int i = 0; i < 5; i++) {
    //目的:在一行打印5个*
    for (int j = 0; j < 5; j++) {
        System.out.print("*");
    }
    //打印完毕之后,进行换行
    System.out.println();//换行语句
}

需求2:打印正三角形(掌握)

/*
        *
        **
        ***
        ****
        *****
*/
​
//把在一行打印5个*这件事情,重复了5次
//决定了行数
for (int i = 1; i <= 5; i++) {
    //目的:在一行打印5个*
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    //打印完毕之后,进行换行
    System.out.println();
}
​
//当i = 1 的时候,打印第一行,内循环范围:1~1
//当i = 2 的时候,打印第二行,内循环范围:1~2
//当i = 3 的时候,打印第三行,内循环范围:1~3
//。。。。
//当i = 5 的时候,打印第五行,内循环范围:1~5

需求3:打印倒三角形(了解)

/*
         *****
         ****
         ***
         **
         *
*/
​
//把在一行打印5个*这件事情,重复了5次
//决定了行数
for (int i = 1; i <= 5; i++) {
    //目的:在一行打印5个*
    for (int j = i; j <= 5; j++) {
        System.out.print("*");
    }
    //打印完毕之后,进行换行
    System.out.println();
}
//当i=1的时候,打印的是第一行,内循环 1~5
//当i=2的时候,打印的是第二行,内循环 2~5
//当i=3的时候,打印的是第三行,内循环 3~5
//。。。。

需求4:打印等腰三角形(掌握)

用基础形状再拼成想要的效果

for (int i = 1; i <= 5; i++) {
    //打印空格
    for (int j = i; j <= 5; j++) {//先打印倒三角形空格
        System.out.print(" ");
    }
​
    //打印*
    for (int j = 1; j <= i; j++) {//再打印正三角*型
        System.out.print("*");
    }
​
    //打印*
    for (int j = 1; j <= i - 1; j++) {//再打一个少一行的三角形即可
        System.out.print("*");
    }
​
    System.out.println();
}

这个题很经典,它告诉我们在遇到一个大问题的时候可以将其分解为若干个小的问题来解决,在算法分析里面称之为分治思想。很多同学在打印三角形可能就是写若干个输出语句System.out.print( )。我不建议这样做,因为即使结果是对的,但是不能达到训练编程思维的目的。

3.8 练习8 99乘法表(了解)

分析:

先打印形状,再修改内容

代码示例:

//先打印一个9行9列的矩形
//负责:打印几行
for (int i = 1; i <= 9; i++) {
    //负责:在一行当中打印多少个*
    for (int j = 1; j <= 9; j++) {
        System.out.print("*");
    }
    System.out.println();
}
​
--------------------------------------------------------
//再打印一个直角三角形
//第一行:1个
//第二行:2个
//第三行:3个
//...
//负责:打印几行
for (int i = 1; i <= 9; i++) {
    //负责:在一行当中打印多少个*
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
        //默认情况下一个制表符等于4个空格,除此之外还由一个对其的功能
    }
    System.out.println();
}
--------------------------------------------------------
//最后修改内容变成99乘法表
//负责:打印几行
for (int i = 1; i <= 9; i++) {
    //负责:在一行当中打印多少个*
    for (int j = 1; j <= i; j++) {
        System.out.print(j + " * " + i + " = " + (i * j) + "\t");
        //默认情况下一个制表符等于4个空格,除此之外还由一个对其的功能
    }
    System.out.println();
}

3.9 练习9 抽奖(掌握)

需求:

一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。

打印效果如下:(随机顺序,不一定是下面的顺序)

888元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 1000元的奖金被抽出 2元的奖金被抽出

思路分析:

  1. 可以把抽取到的奖项,再存到另一个数组当中newArr

  2. 假设现在抽取到588,拿着当前抽取到的奖项588,可以到newArr中判断,是否已经存在。

  3. 如果没有存在,表示当前的奖项是第一次被抽中,添加到newArr当中

  4. 如果已经存在,表示当前的奖项不是第一次出现,重新抽取

代码示例:

//以后随机会有两种思路:
//第一种:一次随一个
//第二种:整体打乱
//1,新建一个数组,存所有的奖项
int[] arr = {2, 588, 888, 1000, 10000};//0~4
​
//2.打乱数组中所有数据的顺序
Random r = new Random();
​
for (int i = 0; i < arr.length; i++) {
    //获取一个随机索引index
    //让i跟index进行交换
    int index = r.nextInt(arr.length);
​
    int temp = arr[i];
    arr[i] = arr[index];
    arr[index] = temp;
}
//遍历数组
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

这个题目告诉我们对打乱数组怎么写。用随机索引进行。

3.10 二维数组(了解)

分析:

二维数组:数组里面存的还是其他数组。

静态初始化:

//首先是一个大数组,在大数组里面存了三个小数组。
//大数组的0索引,是第一个小数组
//大数组的1索引,是第二个小数组
//大数组的2索引,是第三个小数组
int[][] arr = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
};

动态初始化:

//第一个方框里面表示大数组的长度
//第二个方框里面表示每一个小数组的长度
int[][] arr = new int[3][5];

获取元素:

int num1 = arr[0][1];
System.out.println(num1);

修改元素:

需求:把10修改为100
arr[2][1] = 100;

遍历二维数组:

//外循环:遍历大数组,得到大数组里面的每一个小数组
for (int i = 0; i < arr.length; i++) {
    //i 表示大数组的索引
    //arr[i] 依次表示每一个小数组
    //内循环:遍历小数组,得到小数组里面的每一个元素
    for (int j = 0; j < arr[i].length; j++) {
        System.out.print(arr[i][j] + " ");
    }
    //表示一个小数组已经遍历完毕,所以换行处理
    System.out.println();
}

3.11 练习10 商场营业额(了解)

需求:

一家商场每个季度的销售额如下:单位万元。

一季度:20,30,40

二季度:10,35,42

三季度:21,32,49

四季度:51,45,78

要求:

分别中四个数组将每一个季度的营业额存储,再把4个数组存储到一个大数组中。

求出全年的总销售额

代码示例:

//1,利用静态初始化定义一个二维数组
int[][] arr = {
    {20,30,40},
    {10,35,42},
    {21,32,49},
    {51,45,78}
};
​
//2.遍历求和
int sum = 0;
//遍历大数组
for (int i = 0; i < arr.length; i++) {
    //i 表示大数组里面的每一个索引
    //arr[i] 大数组里面的每一个小数组
    for (int j = 0; j < arr[i].length; j++) {
        sum = sum + arr[i][j];
    }
}
​
//3.打印
System.out.println(sum);

4.彩票双色球系统

建议:

把第一个需求,随机生成一组彩票号码能掌握即可。

分析:

1,随机生成一组彩票号码(掌握)

2,键盘录入自己的彩票号码(了解)

3,比较中了多少红球和篮球(了解)

代码示例:

package com.itheima.test;
​
import java.util.Random;
import java.util.Scanner;
​
public class Test17 {
    public static void main(String[] args) {
        //1.随机生成一组彩票号码
        //红球: 范围1~33  6个
        //篮球: 范围1~16  1个
        int[] awordNumber = createAwordNumber();
        for (int i = 0; i < awordNumber.length; i++) {
            System.out.print(awordNumber[i] + " ");
        }
        System.out.println();
​
        //2.键盘录入自己的彩票号码
        int[] userArr = userNumber();
        for (int i = 0; i < userArr.length; i++) {
            System.out.print(userArr[i] + " ");
        }
        System.out.println();
​
​
        //3.比较中了多少红球和篮球
        check(awordNumber,userArr);
​
    }
​
    //比较中奖号码跟 用户输入的号码。
    //获取中了多少红球和多少篮球
    private static void check(int[] awordNumber, int[] userArr) {
        //定义计数器
        int redCount = 0;
        int blueCount = 0;
​
        //遍历用户的数组,获取每一个用户的号码(只要比红球)
        for (int i = 0; i < userArr.length - 1; i++) {
            //i 表示索引 userArr[i] 用户彩票号码
            //拿着用户的号码到awordNumber数组中去判断,是否存在
            boolean flag1 = contains(awordNumber, userArr[i]);
            //如果为真,表示当前红球号码已经中奖
            if(flag1){
                redCount++;
            }
        }
​
        //判断篮球
        boolean flag2 =  userArr[userArr.length - 1] == awordNumber[awordNumber.length - 1];
        if(flag2){
            blueCount++;
        }
​
​
        System.out.println("红球中了" + redCount + "个");
        System.out.println("蓝球中了" + blueCount + "个");
​
        if((redCount == 2 && blueCount ==1) || (redCount == 1 && blueCount == 1) || (redCount == 0 && blueCount == 1)){
            System.out.println("恭喜你,中了六等奖,奖金5元");
        }else if((redCount == 4 && blueCount ==0) || (redCount ==3 && blueCount == 1)){
            System.out.println("恭喜你,中了五等奖,奖金10元");
        }else if((redCount == 5 && blueCount ==0) || (redCount ==4 && blueCount == 1)){
            System.out.println("恭喜你,中了四等奖,奖金200元");
        }else if(redCount == 5 && blueCount ==1){
            System.out.println("恭喜你,中了三等奖,奖金3000元");
        }else if(redCount == 6 && blueCount ==0){
            System.out.println("恭喜你,中了二等奖,奖金500万元");
        }else if(redCount == 6 && blueCount ==1){
            System.out.println("恭喜你,中了一等奖,奖金1000万元");
        }else{
            System.out.println("脸黑,没中~");
        }
​
​
​
    }
​
    //让用户输入自己购买的彩票号码
    private static int[] userNumber() {
        //1.定义一个数组,存红球号码和蓝球号码 6 + 1 = 7
        int[] arr = new int[7];
        //2.用户键盘输入彩票号码(红球) 1~33
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length - 1; ) {
            System.out.println("请输入第" + (i + 1) + "个红球号码");
            int redNumber = sc.nextInt();
            boolean flag = contains(arr, redNumber);
            //判断,用户输入的彩票号码是否在1~33的范围,并且在arr中是不存在的
            if(redNumber >= 1 && redNumber <= 33 && !flag){
                arr[i] = redNumber;
                //只有成功存入,才会添加到数组当中
                i++;//又是
            }else{
                System.out.println("您的红球号码有误,请重新输入");
            }
        }
​
        //当循环结束之后,表示所有的红球号码已经录入完毕
        //接下来录入篮球号码即可
        while (true) {
            System.out.println("请输入蓝球号码 1 ~ 16");
            int blueNumber = sc.nextInt();
            if(blueNumber >= 1 && blueNumber <= 16){
                arr[arr.length - 1] = blueNumber;
                //存入之后,循环结束
                break;
            }else{
                System.out.println("您输入的篮球号码有误,请重新输入");
            }
        }
        //所有的红球和篮球号码已经录入完毕
        return arr;
​
    }
​
    //我要干嘛?我要生成一组随机的彩票号码
    //我完成这件事需要什么? 什么都不需要
    //调用处是否需要继续使用结果? 要,必须返回
    public static int[] createAwordNumber() {
        //1.定义一个数组,存红球号码和蓝球号码 6 + 1 = 7
        int[] arr = new int[7];
        //2.随机生成红球的号码(范围:1~33 不重复)
        Random r = new Random();
        //遍历数组,给数组中添加元素
        //在添加的时候,需要 arr.length - 1
        //因为此时,只添加红球号码
        for (int i = 0; i < arr.length - 1; ) {
            int redNumber = r.nextInt(33) + 1;
            boolean flag = contains(arr, redNumber);
            if (!flag) {
                arr[i] = redNumber;
                i++;//又是一个漂亮的i++语句
            } else {
                System.out.println("重新生成一个号码");
            }
        }
​
        //当循环结束之后,表示所有的红球都已经生成并存入数组
        //接下来,生成篮球号码并存入数组
        int blueNumber = r.nextInt(16) + 1;
        arr[arr.length - 1] = blueNumber;
​
        //把数组返回
        return arr;
    }
​
    //判断数字在数组中是否存在
    //需要什么?数组 数字
    //调用处是否需要使用结果?要
    public static boolean contains(int[] arr, int number) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == number) {
                //只要有一个一样,那么表示number在arr中是存在的,返回true
                return true;
            }
        }
        //当循环结束之后,表示数组里面所有的元素已经判断完毕,就是不存在,返回false
        return false;
    }
}

 最后这个代码比较长,但是要自己能慢慢看懂代码在写什么,这样编程水平也就在慢慢的提高了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个人博客推出了更多功能

背景 Web2.0的典型代表博客&#xff0c;吸引着粉丝们打造属于自己的个人博客&#xff0c;分享自己的学习经验&#xff0c;记录自己的日常生活。随着大厂的入局&#xff0c;我们可以很容易的申请自己的个人博客&#xff0c;但是弊端就是往往会被他们控制&#xff0c;甚至封号。…

汕头市农村生活污水治理“十四五”规划行动方案

汕头&#xff0c;简称“汕”&#xff0c;广东省辖地级市&#xff0c;北接潮州&#xff0c;西邻揭阳&#xff0c;南濒南海&#xff0c;东与台湾隔海相望&#xff0c;境内韩江、榕江、练江三江入海&#xff0c;是中国大陆唯一拥有内海湾的城市。今天就来为大家介绍&#xff0c;汕…

Windows系统实现命令行(CMD)关闭指定的IIS网站

一、需求说明我们部署在Windows服务器上的IIS网站&#xff0c;需要在特定的时间停止一会后在进行重新启动该网站。二、思路分析由于需要特定的时间停止后重启网站&#xff0c;则手动操作肯定是不行的&#xff0c;需要实现自动化操作&#xff1a;①特定时间操作可以使用Windows系…

聚观早报|王慧文要做「中国版 OpenAI」;Temu斥资近亿元赞助超级碗

点击蓝字 / 关注我们今日要闻&#xff1a;王慧文要做「中国版 OpenAI」&#xff1b;Temu斥资近亿元赞助超级碗&#xff1b;新东方在线股价收跌2.8%&#xff1b;ChatGPT带动的AIGC创业热潮要来了&#xff1b;传谷歌拆分其AR部门王慧文要做「中国版 OpenAI」 2 月 13 日&#xff…

CSS中的常见单位(px,%,em,rem,vw,vh,vmax,vmin,calc)

像素(px)&百分比(%) 像素(Pixel) 长度单位&#xff0c;相对于显示器屏幕分辨率而言&#xff0c;通常在不定义显示缩放比例的情况下&#xff0c;1px对应显示器屏幕上的一个像素点。早年的pc端展示的页面基本都用这个单位。 百分比(%) 相对长度单位&#xff0c;指占用的父…

电源模块 DC-DC直流升压正负高压输出12v24v转±110V±150V±220V±250V±300V±600V

特点效率高达80%以上1*2英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上应用HRA 1~40W系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36VDC标准&…

对比Hashtable、HashMap、TreeMap有什么不同?

第9讲 | 对比Hashtable、HashMap、TreeMap有什么不同&#xff1f; Map 是广义 Java 集合框架中的另外一部分&#xff0c;HashMap 作为框架中使用频率最高的类型之一&#xff0c;它本身以及相关类型自然也是面试考察的热点。 今天我要问你的问题是&#xff0c;对比 Hashtable、…

HTTP协议——详细讲解

目录 一、HTTP协议 1.http 2.url url的组成&#xff1a; url的保留字符&#xff1a; 3.http协议格式​编辑 ①http request ②http response 4.对request做出响应 5.GET与POST方法 ①GET ②POST 7.HTTP常见Header ①Content-Type:: 数据类型(text/html等)在上文…

JavaSE系列 打基础版

JavaSE 笔记记录P1 Java概述1.1 java编译1.2 认识JDK、JRE1.3 下载jdk和配置环境变量1.4 开发注意事项和开发细节1.5 学习java之我的需求1.6 转义字符1.7 注释1.8 代码规范1.9 dos命令 了解P2 变量数据类型变量基本使用数据类型转换P3运算符P4 控制结构P5 数组、排序和查找P6面…

突破压缩极限的AI语音编解码器

I. Speech Codecs语音编码的目的是在保持语音质量的前提下尽可能地减少传输所用的带宽&#xff0c;主要是利用人的发声过程中存在的冗余度和人的听觉特性达到压缩的目的。经过了多年的发展&#xff0c;目前语音编解码器大致可以分为以下几类&#xff1a;波形编码&#xff0c;将…

c++ 指针、引用和常量

指针、引用和常量的关系_夜悊的博客-CSDN博客 1. ① 指针是对象&#xff0c;引用不是对象&#xff08;在此可以理解为变量&#xff0c;一个变量是一个对象&#xff09; 指针不必须初始化引用只是为一个已经存在的对象所起的另一个名字&#xff08;别名&#xff09;&#xff…

亚马逊云科技汽车行业解决方案

当今&#xff0c;随着万物智联、云计算等领域的高速发展&#xff0c;创新智能网联汽车和车路协同技术正在成为车企加速发展的关键途径&#xff0c;推动着汽车产品从出行代步工具向着“超级智能移动终端”快速转变。 挑战无处不在&#xff0c;如何抢先预判&#xff1f; 随着近…

安装 GPU 版本的 tensorflow 完整版本

前言&#xff1a; 之前安装的 CPU 版本的 tensorflow 一直出问题&#xff0c;索性就直接安装 GPU 版本的 tensorflow 了&#xff08;有了GPU 就不能浪费&#xff09;。 安装过程&#xff1a; 1&#xff09;看自己有无 GPU&#xff0c;找到对应 GPU 的版本&#xff1a;任务管理…

C生万物 | 常量指针和指针常量的感性理解

文章目录&#x1f4da;引言✒常量指针&#x1f50d;介绍与分析&#x1f4f0;小结与记忆口诀✒指针常量&#x1f50d;介绍与分析&#x1f4f0;小结与记忆口诀&#x1f449;一份凉皮所引发的故事&#x1f448;总结与提炼&#x1f4da;引言 本文我们来说说大家很困惑的两个东西&am…

【蒸滴C】C语言指针入门很难?看这一篇就够了

目录 一、前言 二、指针是什么 小结&#xff1a; 三、指针变量是什么 小结&#xff1a; 四、指针在32位机器和64位机器中的差别 32位机器&#xff1a; 64位机器: 小结&#xff1a; 五、指针和指针类型 &#xff08;1&#xff09;指针的意义 &#xff08;2&#xff…

springboot自动配置原理以及spring.factories文件的作用详解

一、springboot 自动配置原理先说说我们自己的应用程序中Bean加入容器的办法&#xff1a;bean加入容器我们在应用程序的入口设置了 SpringBootApplication标签&#xff0c;默认情况下他会扫描所有次级目录。如果增加了 scanBasePackages属性&#xff0c;就会扫描所有被指定的路…

SAP ABAP根据事务码查找增强最直接的方法

下面是为任意事务代码查找用户出口的步骤&#xff1a; 方法一&#xff1a; 第 1 步&#xff1a;使用 事务代码&#xff1a;SE93。输入您要搜索用户出口的 事务代码。 在我们的场景中&#xff0c;我们将使用 CO11N。 第 2 步&#xff1a;点击显示&#xff1a; 第 3 步&#xf…

2023年浙江安全员精选真题题库及答案

百分百题库提供建筑安全员考试试题、安全员证考试真题、安全员证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 268.注册执业人员未执行法律法规和工程质量强制性标准,造成重大安全事故的,(). A.停止执业 B.5年不予注册 C.10年不予注…

29-Golang中的切片

Golang中的切片基本介绍切片在内存中的形式切片使用的三种方式方式一&#xff1a;方式二&#xff1a;方式三&#xff1a;切片使用的区别切片的遍历切片注意事项和细节说明append函数切片的拷贝操作string和slice基本介绍 1.切片是数组的一个引用&#xff0c;因此切片是引用类型…

采用Spring配置文件管理Bean

文章目录采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Maven项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&#xff09;采用传统方式让勇敢骑士完成杀龙任务&am…