2022java练习三大一电信

文章目录

  • 一、上课抽查
  • 二、为中国福利彩票编写一个双色球的抽奖程序
  • 三、数组Arrays类的基本操作
  • 四、使用ArrayList管理学生


前言:

仅供学习参考,若有不足恳请斧正!

一起学习,一起进步!

一、上课抽查

【问题描述】

定义一个长度为10行2列的字符串类型二维数组,用来存放10个学生的学号和姓名:

  { "10905100", "Tanlinlin" },{ "10905101", "Chenyixing" },

  { "10905102", "Sunsimiao" },{ "10905103", "Zhangwuji" }, 

  { "10905104", "Lichunfeng" },{ "10905105", "Wangfeifei" }, 

  { "10905106", "Qianliuyi" },{ "10905107", "Shenqiqi" }, 

  { "10905108", "Yangtianyi" },{ "10905109", "Xiaozhan" }

编写程序,产生一个0~9的随机数,并输出对应下标的学生的学号和姓名(中间隔一个空格)后换行;每按一次回车,重复上述过程输出下一个学生的学号和姓名,直到按e键结束整个程序的运行

提示:(1)使用Random类生成随机数

       Random()方法:默认使用当前时间的毫秒数作随机数种子(默认调用currentTimeMillis())

       Random(int n):指定随机数种子,每次运行结果相同

       通过Random对象调用nextInt()得到随机整数,请查阅Random类中的相关方法

     调试时,先调用Random()生成Random类对象,在本机调试通过;(每次生成的随机数会不同)

     提交时,从键盘输入随机数种子,调用Random(int n)生成Random类对象(输入不同种子,会生成不同的随机数)

(2)Scanner类的nextLine()、next()都可以输入字符串,但:

         nextLine():以Enter键为结束符,即nextLine()方法返回的是Enter键之前的所有字符,可以得到带空格的字符串

         next():一定要读取到有效字符后才结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

         如何判断是输入了回车键还是其它字符使用nextLine()输入后,可以使用length()获取字符串的长度,为0,则表示输入了回车键

        注意:在使用其他next方法,如double  nextDouble() , float nextFloat() , int  nextInt() 等与nextLine()连用时都存在着nextLine()自动读取前一次next()去掉的Enter作为结束符,导致本次输入无法正确读取值的问题。

      解决的办法:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将该Enter结束符过滤掉。       


【输入形式】

第1行为一个整数,即随机数种子;第2行开始按n个回车,最后一行输入e

【输出形式】

【样例输入】

5
Enter键
Enter键
Enter键
e

【样例输出】

10905107 Shenqiqi

10905102 Sunsimiao

10905104 Lichunfeng 

import java.util.Random;
import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sca= new Scanner(System.in);
        int n =sca.nextInt();
        //Scanner中的nextInt()只会读取数值,剩下"\n"还没有读取,并将cursor放在本行中。
        //相当于C语言里面的scanf("%d",&i);

        Random r = new Random(n);

        String[][] stu = {{ "10905100", "Tanlinlin" },{ "10905101", "Chenyixing" },

                { "10905102", "Sunsimiao" },{ "10905103", "Zhangwuji" },

                { "10905104", "Lichunfeng" },{ "10905105", "Wangfeifei" },

                { "10905106", "Qianliuyi" },{ "10905107", "Shenqiqi" },

                { "10905108", "Yangtianyi" },{ "10905109", "Xiaozhan" }};

        String t;
        int a;

        sca.nextLine();//消化掉输入n时候的空格
        while(true){
            t= sca.nextLine();

            if (t.equals("e")){
                break;
            }

            if (t.length()==0){
                a = r.nextInt(10);
                System.out.println(stu[a][0]+" "+stu[a][1]);
            }
        }
    }
}

 引用的材料:

Java字符串比较(3种方法) (biancheng.net)

(4条消息) Java:Scanner中的nextInt()方法_nextint方法_喵喵锤锤你小可爱的博客-CSDN博客

二、为中国福利彩票编写一个双色球的抽奖程序

【问题描述】中国福利彩票的双色球开奖规则:从编号是01~33的红色球中选取6个,从编号01~16的蓝色球中选取一个。 模拟这个抽奖过程,输出抽中的红色和蓝色球号。 提示:将红色球和蓝色球各自保存在一个boolean数组中,数组元素取true/false代表该球是否被选中(初始均为false ).

提示:使用Random类生成随机数

       Random()方法:默认使用当前时间的毫秒数作随机数种子(默认调用currentTimeMillis())

       Random(int n):指定随机数种子,每次运行结果相同

       通过Random对象调用nextInt()得到随机整数,请查阅Random类中的相关方法

 如:生成1-10之间有随机数

        Random r = new Random(n);

        int a = r.nextInt(10) + 1;

     调试时,先调用Random()生成Random类对象,在本机调试通过;(每次生成的随机数会不同)

     提交时,从键盘输入随机数种子,调用Random(int n)生成Random类对象(输入不同种子,会生成不同的随机数)

【输入形式】一个整数,作为随机种子
【输出形式】两行,抽中的红色球编号
【样例输入】1234

【样例输出】

09 18 19 28 30 33 

08

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        //输入随机数种子
        Scanner sca = new Scanner(System.in);
        int n=sca.nextInt();
        //指定种子
        Random r = new Random(n);
        //声明数组
        boolean[] red = new boolean[34];
        boolean[] blue = new boolean[17];
//抽出红球
        int temp = 0;//存储新生成的随机数
        ArrayList<Integer> temp_red =new ArrayList<>();//存储出现过的随机数,以便排除
                                                       //重复的随机数
        //System.out.println("红球随机数:");
        for (int i = 0; i < 6; i++) {
            temp = r.nextInt(33)+1;
            while (temp_red.contains(temp)){//如有重复,重新生成随机数
                temp=r.nextInt(33)+1;
            }
            temp_red.add(temp);
            red[temp]=true;
            //System.out.println(temp);
        }
//抽蓝球
        blue[temp=r.nextInt(16)+1] = true;
        //System.out.println("蓝球随机数:");
        //System.out.println(temp+"\n");
//输出抽出球的编号
//红球
        for (int i = 1; i < 34; i++) {
            if (red[i]){
                if (i<10){
                    System.out.print("0");
                }
                System.out.print(i+" ");
            }
        }
        System.out.println();
//蓝球
        for (int i = 1; i < 17; i++) {
            if (blue[i]){
                if (i<10){
                    System.out.print("0");
                }
                System.out.println(i);
                break;
            }
        }
    }
}

材料引用:

 Java创建boolean型数组 - BAISHUN66 - 博客园 (cnblogs.com)

三、 数组Arrays类的基本操作

【问题描述】

有10个元素的int型数组,元素值从键盘输入,完成以下操作:

1.输出数组的全部元素值

2.将该数组中的全部元素复制到另一个数组b中并输出。

3.将该数组中的前6个元素复制到另一个数组c中,并输出。

4.将该数组的后5个元素复制到另一个数组d中,并将数组d的最后一个元素值改为-100后输出。

提示:数组元素复制使用System类中的arraycopy()    或Arrays类的copyOf()

           具体用法查阅Java API文档

           数组元素输出使用Arrays类的toString()

【样例输入】

1 2 3 4 5 6 7 8 9 10

【样例输出】

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6]
[6, 7, 8, 9, -100]
import java.util.Arrays;
import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        int[] arr = new int [10];
        int[] arr1,arr2,arr3;
        Scanner sca =new Scanner(System.in);

        for (int i = 0; i < 10; i++) {
            arr[i]= sca.nextInt();

        }//Arrays.toString()方法可输出数组所有元素并带[]
        System.out.println(Arrays.toString(arr));

        arr1=Arrays.copyOf(arr,10);//数组复制
        System.out.println(Arrays.toString(arr1));

        arr2=Arrays.copyOf(arr,6);
        System.out.println(Arrays.toString(arr2));

        arr3=Arrays.copyOfRange(arr,5,10);//可指定 要复制数组的内容 从第五个开始到第十个
        arr3[4]=-100;
        System.out.println(Arrays.toString(arr3));

    }
}

 文章引用:

(4条消息) java复制数组的两种常用方法copyOf和copyOfRange_copyofrange复制后4个元素_没酒今朝醉的博客-CSDN博客

java输出数组的方法_java怎样输出数组中的所有元素 - 腾讯云开发者社区-腾讯云 (tencent.com)

四、使用ArrayList 管理学生

【问题描述】利用ArrayList管理学生信息:

      (1)输入一个学生人数n,然后输入n个学生的姓名,输出所有学生姓名及元素个数;

      (2)在ArrayList中指定位置处(指定下标为3)插入一个学生,姓名由键盘输入,输出操作后的所有学生姓名及元素个数;

      (3)删除下标为1的学生,输出操作后的所有学生姓名及元素个数。

【输入形式】

第一行:一个整数n,后跟n个学生的姓名

第二行:在指定位置处(下标为3)插入一个学生的姓名
【输出形式】

见样例

【样例输入】

5 zhangfei zhaoyun weiyan libei huangzhong

zhugekongming

【样例输出】

Content of ArrayList:[zhangfei, zhaoyun, weiyan, libei, huangzhong]

Size of ArrayList:5

Content of ArrayList:[zhangfei, zhaoyun, weiyan, zhugekongming, libei, huangzhong]

Size of ArrayList:6

Content of ArrayList:[zhangfei, weiyan, zhugekongming, libei, huangzhong]

Size of ArrayList:5

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sca= new Scanner(System.in);
        int n = sca.nextInt();//n 个学生

        ArrayList<String> stu=new ArrayList<>();//课本p69
        for (int i = 0; i < n; i++) {
            stu.add(sca.next()); // 输入姓名
        }

        System.out.println("Content of ArrayList:"+ stu);
        System.out.println("Size of ArrayList:"+stu.size());

        stu.add(3, sca.next());//在下标为3处插入姓名
        System.out.println("Content of ArrayList:"+ stu);
        System.out.println("Size of ArrayList:"+stu.size());

        stu.remove(1);//删除下标为1的学生
        System.out.println("Content of ArrayList:"+ stu);
        System.out.println("Size of ArrayList:"+stu.size());
    }
}


总结

感谢舒振宇老师。

先思考出解决问题的方法,再尝试用java语言描述解决方法;而不是同时进行,这样会非常混乱。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qiming_Peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值