文章目录
- 一、上课抽查
- 二、为中国福利彩票编写一个双色球的抽奖程序
- 三、数组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语言描述解决方法;而不是同时进行,这样会非常混乱。