文章目录
1.while循环练习:回文数
需求:给你一个整数x,如果x是一个回文整数,打印true,否则返回false
解释:回文数是指正序和倒序读都是一样的整数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
int temp = number;//定义一个临时变量用来记录number的值
int num = 0;
while (number != 0) {
int ge = number % 10;
number = number / 10;
num = num * 10 + ge;
}
System.out.println(num == temp);
}
2.for循环练习:求平方根
需求:键盘录入一个大于等于2的整数x,计算并返回x的平方根。结果只保留整数部分,小数部分将被舍去。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
for (int i = 1; i <= number; i++) {
if (i * i == number) {
System.out.println(i + "就是" + number + "的平方根");
break;//一旦找到,循环就可以停止,后面的数字不用再找,提高代码的运行效率
} else if (i * i > number) {
System.out.println((i - 1) + "就是" + number + "平方根的整数部分");
break;
}
}
}
3.for循环练习:求质数
需求:键盘录入一个正整数x,判断该整数是否为一个质数。
质数:只能被1和本身整除,否则为合数。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
boolean flag = true;//表示最初就认为number是一个质数
for (int i = 2; i < number; i++) {
if (number % i == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.println(number + "是一个质数");
} else {
System.out.println(number + "不是一个质数");
}
}
4.while循环练习:数字炸弹小游戏
需求:程序自动生成一个1-100之间的随机数,使用程序实现猜出这个数字是多少?
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(100) + 1;//表示生成一个1-100的随机数
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你猜测的数字:");
int guessnumber = sc.nextInt();
if (guessnumber == number) {
System.out.println("猜对啦!");
break;
} else if (guessnumber > number) {
System.out.println("猜大了!");
} else {
System.out.println("猜小了!");
}
}
}
5.数组练习:遍历数组求和
需求:生成10个1~100之间的随机数存入数组
1.求出所有数据的和
2.求出所有数据的平均值
3.统计有多少个数据比平均值小
//一个循环尽量只做一个操作
public static void main(String[] args) {
int[] arr = new int[10];
Random r = new Random();
int sum = 0;
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(100) + 1;
}
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("数组中的数据和为:"+sum);
int average = sum / arr.length;
System.out.println("数组中的平均数为:"+average);
int count=0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]<average){
count++;
}
}
System.out.println("数组中的小于平均数的个数为:"+count);
}
6.数组练习:交换数组中的数组
需求:定义一个数组,存入1,2,3,4,5。按照要求交换索引对应的元素
交换前:1,2,3,4,5
交换后:5,4,3,2,1
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
7.数组练习:打乱数组中的数据
需求:定义一个数组,存入1~5.要求打乱数组中所有数据的顺序
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
Random r=new Random();
for (int i = 0; i < arr.length; i++) {
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.print(arr[i]);
}
}
8.方法练习:复制数组
需求:定义一个方法copyOfRange(int[] arr,int from,int to)
功能:将数组arr中从索引from(包括from)开始。
到索引to结束(不包含to)的元素复制到新数组中,将新数组返回。
public static void main(String[] args) {
int[] arr = {101, 202, 303, 404, 505, 606, 707, 808, 909};
//方法调用
int[] newarr = copyOfRange(arr, 2, 6);
for (int i = 0; i < newarr.length; i++) {
System.out.println(newarr[i]);
}
}
//方法定义
public static int[] copyOfRange(int[] arr, int from, int to) {
int newarr[] = new int[to - from];
for (int i = from, j = 0; i < to; i++, j++) {
newarr[j] = arr[i];
}
return newarr;
}
9.综合练习:卖飞机票
需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入机票原价:");
int price = sc.nextInt();
System.out.println("请输入当前月份:");
int month = sc.nextInt();
System.out.println("请输入购买的舱位(0:头等舱 1:经济舱):");
int seat = sc.nextInt();
switch (month) {
case 5, 6, 7, 8, 9, 10:
System.out.println("您的飞机票原价为" + price + "元,打完折后需要" + getPrice(price, seat, 0.9, 0.85) + "元");
break;
case 11, 12, 1, 2, 3, 4:
System.out.println("您的飞机票原价为" + price + "元,打完折后需要" + getPrice(price, seat, 0.7, 0.65) + "元");
break;
default:
System.out.println("输入的月份有误!");
break;
}
}
public static double getPrice(int price, int seat, double v0, double v1) {
double newPrice = 0;
if (seat == 0) {
newPrice = price * v0;
} else if (seat == 1) {
newPrice = price * v1;
} else {
System.out.println("没有这个舱位!");
}
return newPrice;
}
10.综合练习:生成验证码
需求:定义发方法实现随机产生一个5位的验证码
验证格式:长度为5,前四位是大写字母或者小写字母,最后一位是数字。
public static void main(String[] args) {
char[] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
if (i <= 25) {
chs[i] = (char) (97 + i);
} else {
chs[i] = (char) (65 + i - 26);
}
}
String result = "";
//生成随机的字母
Random r = new Random();
for (int i = 0; i < 4; i++) {
int randominedx = r.nextInt(chs.length);
result += chs[randominedx];
}
//生成随机的数字
int number = r.nextInt(10);
result += number;
//输出随机生成的五位验证码
System.out.println(result);
}
11.综合练习:数字加密及解密
需求:某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
规则如下:先得到每位数,然后每位加5,再对10求余,最后将所有数字反转,得到一串新数,最后根据得到的新数解密出来原密码。
public static void main(String[] args) {
//数字加密
System.out.println("----数字加密----");
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int number = sc.nextInt();
int temp = number;
int count = 0;
while (number != 0) {
number /= 10;
count++;
}
int[] arr = new int[count];
int index = arr.length - 1;
while (temp != 0) {
int ge = temp % 10;
temp /= 10;
arr[index] = ge;
index--;
}
//每位数+5
for (int i = 0; i < arr.length; i++) {
arr[i] += 5;
}
//对10取余
for (int i = 0; i < arr.length; i++) {
arr[i] %= 10;
}
//将所有数字反转
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp1 = arr[i];
arr[i] = arr[j];
arr[j] = temp1;
}
int num = 0;
for (int i = 0; i < arr.length; i++) {
num = num * 10 + arr[i];
}
System.out.println(num);
//数字解密
System.out.println("----数字解密----");
//将所有数字反转
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp2 = arr[i];
arr[i] = arr[j];
arr[j] = temp2;
}
//对10取余
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 0 && arr[i] <= 4) {
arr[i] += 10;
}
}
for (int i = 0; i < arr.length; i++) {
arr[i] -= 5;
}
int num2 = 0;
for (int i = 0; i < arr.length; i++) {
num2 = num2 * 10 + arr[i];
}
System.out.println(num2);
}
12.综合练习:抢红包
在参加抽奖活动时,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。
请使用代码模拟抽奖,打印出每个选项,奖项的出现顺序要随机且不重复。
public static void main(String[] args) {
int[] arr = {2, 588, 888, 1000, 10000};
Random r=new Random();
for (int i = 0; i < arr.length; i++) {
int randomIndex=r.nextInt(arr.length);
int temp=arr[i];
arr[i]=arr[randomIndex];
arr[randomIndex]=temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
13.字符串练习:用户登录
需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应提示。
public static void main(String[] args) {
String rightUsername = "zhangsan";
String rightPassword = "123456";
for (int i = 2; i >= 0; i--) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
if (username.equals(rightUsername) && password.equals(rightPassword)) {
System.out.println("输入正确,登录成功!");
break;
} else {
if (i == 0) {
System.out.println("错误次数已达3次,账号被锁定!");
} else {
System.out.println("用户名或密码输入错误!(你还剩下" + i + "次机会)");
}
}
}
}
14.字符串练习:手机号屏蔽
截取:String substring(int beginIndex,int endIndex)
截取到末尾:String substring(int beginIndex)
注意:包头不包尾,包左不包右;只有返回值才是截取的小串
public static void main(String[] args) {
String phoneNumber = "1234567891";
//1.截取手机号前3位
String start = phoneNumber.substring(0, 3);
//2.截取手机号后四位
String end = phoneNumber.substring(7);
//3.拼接
String result = start + "****" + end;
System.out.println(result);
}
15.字符串练习:敏感词替换
替换:String replace(旧值,新值)
注意点:只有返回值才是替换之后的结果
public static void main(String[] args) {
String talk = "你玩的真好,以后不要再玩了,MD,SB";
//定义一个敏感词库
String[] arr = {"TMD", "MD", "SB"};
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i], "***");
}
System.out.println(talk);
}
16.字符串练习:金额转换
针对发票的金额转换,转换的金额为7位,不足7位的金额前面需补0
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个金额:");
int money = sc.nextInt();
//1.判断输入的金额是否有效
while (true) {
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金额无效!");
}
}
//2.将数字金额转换成大写方式
String moneystr = "";//用来存储金额的大写
while (true) {
int ge = money % 10;
String capitalNumber = getCapitalNumber(ge);
moneystr = capitalNumber + moneystr;
money /= 10;
if (money == 0) {//如果数字上的每位都获取到了,那么money记录的就是0,此时循环结束
break;
}
}
//3.不足7位就补零
int count = 7 - moneystr.length();
for (int i = 0; i < count; i++) {
moneystr = "零" + moneystr;
}
//4.插入单位
String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
String result = "";
for (int i = 0; i < moneystr.length(); i++) {
char c = moneystr.charAt(i);
result += c + arr[i];
}
System.out.println(result);
}
//定义一个方法把数字变成大写的中文
public static String getCapitalNumber(int number) {
String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
return arr[number];
}
17.字符串综合练习:转换罗马数字
键盘录入一个字符串,
要求:长度小于等于9,只能是数字
将内容变成罗马数字
下面是阿拉伯数字与罗马数字的对比关系:
1:Ⅰ,2:Ⅱ,3:Ⅲ,4:Ⅳ,5:Ⅴ,6:Ⅵ,7:Ⅶ,8:Ⅷ,9:Ⅸ
public static void main(String[] args) {
String str;
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
str = sc.next();
boolean flag = checkStr(str);
if (flag) {
break;
} else {
System.out.println("当前输入的字符格式不正确,请重新输入!");
}
}
StringJoiner sj = new StringJoiner(",");
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int number = c - 48;
sj.add(changeLuoMa(number));
}
System.out.println(sj);
}
//校验字符串是否满足要求
public static boolean checkStr(String str) {
if (str.length() > 9) {
return false;
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c < '0' || c > '9') {
return false;
}
}
return true;
}
//将输入的阿拉伯数字转换成罗马数字
public static String changeLuoMa(int number) {
String[] arr = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ"};
return arr[number];
}
18.面向对象综合练习:对象数组
定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息
如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生信息。
要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁
javabean类:Students.java
public class Students {
private int stuId;
private String name;
private int age;
public Students() {
}
public Students(int stuId, String name, int age) {
this.stuId = stuId;
this.name = name;
this.age = age;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getStuId() {
return stuId;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
studentInfo.java
public static void main(String[] args) {
//1.创建一个数组用来存储学生对象
Students[] stus = new Students[3];
//2.创建学生对象并添加到数组当中
Students stu1 = new Students(1, "张三", 18);
Students stu2 = new Students(2, "李四", 16);
Students stu3 = new Students(3, "王五", 17);
//3.把学生信息添加到数组中
stus[0] = stu1;
stus[1] = stu2;
stus[2] = stu3;
//要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
Students stu4 = new Students(4, "孙七", 20);
contains(stus, stu4.getStuId());
if (false) {
System.out.println("当前ID已存在,请重新输入!");
} else {
int count = getCount(stus);
if (count == stus.length) {
//数组已经存满
Students[] newStus = creatNewarr(stus);
newStus[count] = stu4;
//要求2:添加完毕之后,遍历所有学生信息。
System.out.println("--所有学生信息--");
printArr(newStus);
} else {
//数组没有存满
stus[count] = stu4;
//要求2:添加完毕之后,遍历所有学生信息。
System.out.println("--所有学生信息--");
printArr(stus);
}
}
//要求3:通过id删除学生信息
/*
int index = getIndex(stus, 1);
if (index >= 0) {
//如果存在,则删除
stus[index] = null;
System.out.println("--删除后学生信息--");
printArr(stus);
} else {
//如果不存在,则提示删除失败
System.out.println("当前ID不存在,删除失败!");
}
*/
//要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁
int index = getIndex(stus, 2);
if (index >= 0) {
//存在
Students stu = stus[index];
int neaAge = stu.getAge() + 1;
stu.setAge(neaAge);
System.out.println("--修改后学生信息--");
printArr(stus);
} else {
//不存在
System.out.println("当前ID不存在,修改失败!");
}
}
//找到id在数组中的索引
public static int getIndex(Students[] stus, int id) {
for (int i = 0; i < stus.length; i++) {
Students stu = stus[i];
if (stu != null) {
int sid = stu.getStuId();
if (sid == id) {
return i;
}
}
}
return -1;
}
//遍历所有学生信息
public static void printArr(Students[] stus) {
for (int i = 0; i < stus.length; i++) {
Students s = stus[i];
if (s != null) {
System.out.println(s.getStuId() + "," + s.getName() + "," + s.getAge());
}
}
}
//当数组长度不够时,创建新数组,并把旧数组的数据存入新数组中
public static Students[] creatNewarr(Students[] stus) {
Students[] newStus = new Students[stus.length + 1];
for (int i = 0; i < stus.length; i++) {
newStus[i] = stus[i];//把老数组的元素添加到新数组中
}
return newStus;
}
//判断数组里面的空间是否已经存满数据
public static int getCount(Students[] stus) {
int count = 0;
for (int i = 0; i < stus.length; i++) {
if (stus[i] != null) {
count++;
}
}
return count;
}
//判断学号是否存在
public static boolean contains(Students[] stus, int id) {
for (int i = 0; i < stus.length; i++) {
Students stu = stus[i];
if (stu != null) {
int sid = stu.getStuId();
if (sid == id) {
return true;
}
}
}
return false;
}
19.集合练习:添加手机对象并返回要求的数据
需求:定义javabean类(Phone)
Phone属性:品牌,价格。
main方法中定义一个集合,存入三个手机对象。
分别为小米,1000。苹果,8000。锤子,2999.
定义一个方法,将价格低于3000的手机信息返回。
javabean类:Phone.java
public class Phone {
private String brand;
private int price;
public Phone() {
}
public Phone(String brand, int price) {
this.brand = brand;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
phoneInfo.java
public static void main(String[] args) {
ArrayList<Phone> list=new ArrayList<>();
Phone p1=new Phone("小米",1000);
Phone p2=new Phone("苹果",8000);
Phone p3=new Phone("锤子",2999);
list.add(p1);
list.add(p2);
list.add(p3);
ArrayList<Phone> phoneInfoList=getPhoneInfo(list);
for (int i = 0; i < phoneInfoList.size(); i++) {
Phone phone= phoneInfoList.get(i);
System.out.println(phone.getBrand()+","+phone.getPrice());
}
}
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
ArrayList<Phone> resultList=new ArrayList<>();//定义一个集合:用于存储手机价格低于3000的手机对象
for (int i = 0; i < list.size(); i++) {
Phone p=list.get(i);
int price=p.getPrice();
if (price<3000){
resultList.add(p);
}
}
return resultList;
}
20.集合练习:添加用户对象并判断是否存在
需求:main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
要求:定义一个方法,根据id查找对应的用户信息。
如果存在,返回true
如果不存在,返回false
User.java
public class User {
private String id;
private String username;
private String password;
public User() {
}
public User(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
userInfo.java
public static void main(String[] args) {
/*集合练习:添加用户对象并判断是否存在
需求:main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
要求:定义一个方法,根据id查找对应的用户信息。
如果存在,返回true
如果不存在,返回false
*/
ArrayList<User> list = new ArrayList<>();
User user1 = new User("user001", "张三", "123456");
User user2 = new User("user002", "李四", "1234567");
User user3 = new User("user003", "王五", "12345678");
list.add(user1);
list.add(user2);
list.add(user3);
boolean flag = checkId(list, "user005");
System.out.println(flag);
}
public static boolean checkId(ArrayList<User> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return true;
}
}
return false;
}
📢欢迎点赞👍 收藏🌟 留言💬
📢单纯分享日常中的小练习,技术有限,如果发现有错欢迎指导