1、5个一行输出1-100之间的偶数
(1)输出1-100偶数,
(2)要求:每5个偶数一行,一行中的每个偶数数字之间使用逗号分隔
public class Homework1 {
public static void main(String[] args) {
for (int i=2; i<=100; i+=2){
if(i%10 != 0){
System.out.print(i + ",");
}else{
System.out.println(i);
}
}
}
}
或者
public class Homework1 {
public static void main(String[] args) {
int count = 0;
for (int i=2; i<=100; i+=2){
count++;
if(count<5){
System.out.print(i + ",");
}else{
System.out.println(i);
count = 0;
}
}
}
}
2、趣味折纸
世界最高山峰是珠穆朗玛峰,它的高度是8848.86米,假如有一张足够大的纸,它的厚度是0.1毫米。
请问,这张纸需要折叠(对折)多少次,才可以折成珠穆朗玛峰的高度?
public class Homework2 {
public static void main(String[] args) {
//定义一个计数器,初始值为0
int count = 0;
//定义珠穆朗玛峰的高度
int zf = 8848860;//单位毫米
//循环的执行过程中每次纸张折叠,纸张的厚度要加倍
for(double paper = 0.1; paper < zf; paper *= 2){
//在循环中执行累加,对应折叠了多少次
count++;
}
//打印计数器的值
System.out.println("需要折叠:" + count + "次");
}
}
3、计算这一天是这一年的第几天
案例需求:从键盘分别输入年、月、日,使用循环for+if实现,判断这一天是当年的第几天
开发提示:
(1)每个月总天数如下:
- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。
(2)闰年的判断标准是:
- 年份year可以被4整除,但不能被100整除
- 或年份year可以被400整除
import java.util.Scanner;
public class Homework3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入年:");
int year = input.nextInt();
System.out.print("请输入月:");
int month = input.nextInt();
System.out.print("请输入日:");
int day = input.nextInt();
input.close();
//计算这一天是这一年的第几天
int days = day;
for (int i = 1; i < month; i++) {
if (i == 4 || i == 6 || i == 9 || i == 11) {
days += 30;
} else if (i == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days += 29;
} else {
days += 28;
}
} else {
days += 31;
}
}
System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
}
}
4、计算这一天是这一年的第几天
案例需求:
(1)从键盘分别输入年、月、日,判断这一天是当年的第几天。
(2)要求要对输入值进行合法性的判断,确保输入的年份值必须大于0,月份值必须在[1,12]之间,日期值必须在[1, 当月最大日期值]范围内。
开发提示:
(1)每个月总天数如下:
- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。
(2)闰年的判断标准是:
- 年份year可以被4整除,但不能被100整除
- 或年份year可以被400整除
import java.util.Scanner;
public class Homework4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//如果要考虑输入非法值的情况,代码就比较复杂
System.out.println("请输入日期:");
int year;
while(true){
System.out.print("年:");
year = input.nextInt();
if(year > 0){
break;
}else{
System.out.println("年份必须大于0");
}
}
int month;
while(true){
System.out.print("月:");
month = input.nextInt();
if(month >=1 && month <= 12){
break;
}else{
System.out.println("月份范围是[1,12]");
}
}
//计算month月的总天数
int totalDaysOfMonth;
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
totalDaysOfMonth = 29;
} else {
totalDaysOfMonth = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
totalDaysOfMonth = 30;
} else {
totalDaysOfMonth = 31;
}
int day;
while(true){
System.out.print("日");
day = input.nextInt();
if(day <= 0){
System.out.println("日期必须大于0");
}else if(day > totalDaysOfMonth){
System.out.println(year +"年" + month +"月最多只有" + totalDaysOfMonth + "天");
}else{
break;
}
}
input.close();
//计算这一天是这一年的第几天
int days = day;
for (int i = 1; i < month; i++) {
if (i == 4 || i == 6 || i == 9 || i == 11) {
days += 30;
} else if (i == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days += 29;
} else {
days += 28;
}
} else {
days += 31;
}
}
System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
}
}
5、计算这一天是在打鱼还是晒网
案例需求:
(1)假设从2000年1月1日开始三天打鱼,两天晒网,
(2)从键盘输入今天的日期年、月、日,显示今天是打鱼还是晒网?
(3)开发提示:
- 先计算这一天是这一年的第几天,即总天数
- 再用总天数 % 5(三天打鱼两天晒网的周期),根据结果来判断是打鱼还是晒网
(4)每个月总天数:
- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。
(5)闰年的判断标准是:
- 年份year可以被4整除,但不能被100整除
- 或者年份year可以被400整除
import java.util.Scanner;
public class Homework5 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//如果要考虑输入非法值的情况,代码就比较复杂
System.out.println("请输入日期:");
int year;
while(true){
System.out.print("年:");
year = input.nextInt();
if(year >=2000){
break;
}else{
System.out.println("年份必须大于等于2000");
}
}
int month;
while(true){
System.out.print("月:");
month = input.nextInt();
if(month >=1 && month <= 12){
break;
}else{
System.out.println("月份范围是[1,12]");
}
}
//计算month月的总天数
int totalDaysOfMonth;
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
totalDaysOfMonth = 29;
} else {
totalDaysOfMonth = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
totalDaysOfMonth = 30;
} else {
totalDaysOfMonth = 31;
}
int day;
while(true){
System.out.print("日");
day = input.nextInt();
if(day <= 0){
System.out.println("日期必须大于0");
}else if(day > totalDaysOfMonth){
System.out.println(year +"年" + month +"月最多只有" + totalDaysOfMonth + "天");
}else{
break;
}
}
input.close();
//计算[2000, year-1]年的总天数
int days = 0;
for(int i=2000; i<year; i++){//这个i代表年份
if(i%4==0 && i%100!=0 || i%400==0){
days+=366;
}else{
days+=365;
}
}
//计算这一天是第year年的第几天
for (int i = 1; i < month; i++) {
if (i == 4 || i == 6 || i == 9 || i == 11) {
days += 30;
} else if (i == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days += 29;
} else {
days += 28;
}
} else {
days += 31;
}
}
days += day;
//判断
System.out.print(year + "年" + month + "月" + day + "日这一天在");
if(days%5==1 || days%5==2 || days%5==3){
System.out.println("打鱼");
}else{
System.out.println("晒网");
}
}
}
6、月份
(1)用一个数组,保存12个月的英语单词
{"January","February","March","April","May","June","July","August","September","October","November","December"}
(2),从键盘输入1-12,显示对应的单词。
import java.util.Scanner;
public class Homework6 {
public static void main(String[] args) {
String[] monthNames = {"January","February","March","April","May","June","July","August","September","October","November","December"};
Scanner input = new Scanner(System.in);
System.out.print("请输入月份值:");
int month = input.nextInt();
if(month <1 || month> 12){
System.out.println("输入有误");
}else{
System.out.println("月份" + month +"是" + monthNames[month-1]);
}
input.close();
}
}
7、打印扑克牌
案例需求:遍历输出一副扑克牌。
开发提示:
(1)用第一个数组保存扑克牌的所有花色:黑桃、红桃、梅花、方片
String[] hua = {"黑桃","红桃","梅花","方片"};
(2)用第二个数组保存具有以上花色的数字:2-K
String[] dian = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
(3)用第三个数组保存扑克牌的牌面
String[] pu = new String[hua.length*dian.length+2];
(4)嵌套遍历第1个、第2个数组,排列组合生成扑克牌牌面,并把结果放到第3个数组的元素中
(5)单独考虑大王小王
(6)遍历输出
public class Homework7 {
public static void main(String[] args) {
String[] hua = {"黑桃","红桃","梅花","方片"};
String[] dian = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] pu = new String[hua.length*dian.length+2];
for(int i=0,k=0; i<hua.length; i++){
for(int j=0; j<dian.length; j++,k++){
pu[k] = hua[i]+dian[j];
}
}
pu[pu.length-2] = "大王";
pu[pu.length-1] = "小王";
for (int i = 1; i <= pu.length; i++) {
System.out.print(pu[i-1]+" ");
if(i%13==0){
System.out.println();
}
}
}
}
8、正序和逆序输出26个英文字母
(1)要求使用char数组存储26个英文字母,并分别用正序和逆序方式显示输出。
(2)要求每10个字母一行。
public class Homework8 {
public static void main(String[] args) {
char[] letters = new char[26];
for (int i=0; i<letters.length; i++){
letters[i] = (char)('a' + i);
}
System.out.println("小写字母的正序排序:");
int count = 0;
for (int i = 0; i <letters.length; i++) {
count++;
if(count == 10 || i == letters.length-1){
System.out.println(letters[i]);
count = 0;
}else if(count < 10) {
System.out.print(letters[i]+",");
}
}
System.out.println("小写字母的逆序排序:");
count = 0;
for (int i = letters.length-1; i >= 0; i--) {
count++;
if(count == 10 || i == 0){
System.out.println(letters[i]);
count = 0;
}else if(count < 10) {
System.out.print(letters[i]+",");
}
}
}
}
9、随机生成一组验证码
案例需求:随机生成一组验证码,验证码由大小写字母和10个阿拉伯数字字符中的任意6位组成。
开发提示:
1、声明一个char[]数组,长度为62,并存储26个小写字母、26个大写字母、10个阿拉伯数字字符
2、随机生成6位下标,下标范围是[0,62),取出该下标对应的字符,把它们拼接成一个6位字符构成的验证码
public class Homework9 {
public static void main(String[] args) {
char[] letters = new char[26*2+10];
//[0,25]存储小写字母
//[26,51]存储大写字母
//[52,61]存储大写字母
for (int i=0; i<26; i++){
letters[i] = (char)('a' + i);
letters[26+i] = (char)('A' + i);
}
for (int i=0; i<10; i++){
letters[52 + i] = (char)('0' + i);
}
String code = "";
for (int i=0; i<6; i++){
/*
Math.random():[0,1)的小数
Math.random()*letters.length:[0,letters.length)的小数
(int)(Math.random()*letters.length):[0,letters.length)的整数,
即[0, letters.length-1]
*/
int index = (int)(Math.random()*letters.length);
code += letters[index];
}
System.out.println("随机验证码:" + code);
}
}
10、判断数组中的元素值是否对称
判断某个数组是否是对称数组,即数组正序遍历和倒序遍历的结果是一样的。
开发提示:循环比较数组首尾对称位置元素是否相同,如果有不同,就不是对称数组,所有对称位置都相等才是对称数组。
public class Homework10 {
public static void main(String[] args){
int[] arr = {1,2,3,4,4,3,2,1};
//(1)先假设它是对称的
boolean flag = true;
//(2)遍历,查看数组的元素是否首尾对称
//left表示左边的下标
//right表示右边的下标
for(int left=0,right=arr.length-1; left<right; left++,right--){
if(arr[left] != arr[right]){
flag = false;
break;
}
}
System.out.println(flag?"对称":"不对称");
}
}
11、模拟大乐透
大乐透(前区“35选5”+后区“12选2”),即前区在1-35之间的号码中随机选取5个,后区在1-12之间的号码中随机选取2个,组成一期的中奖号码,请用程序模拟产生一组大乐透中奖号码。
开发提示:
- 声明一个int类型的数组front,长度为35,默认值都是0;
- 声明一个int类型的数组after,长度为12,默认值都是0;
- 随机产生[0,35)之间的整数。如果随机产生的是0,那么就把front[0]修改为1,如果随机产生的是5,那么就把front[5]修改为1,如果随机产生的是10,就把front[10]修改为1。但是如果本次随机产生的是5,而front[5]已经是1了,那么需要重新随机产生一个整数。用这种方式把front数组的5个元素修改为1。
- 随机产生[0,12)之间的整数。使用同样的方式,把after数组的2个元素修改为1。
- 遍历front和after数组,输出大乐透中奖号码,判断front和after数组元素是否为1,如果为1,就显示它的下标+1值。
public class Homowork11 {
public static void main(String[] args) {
int[] front = new int[35];
int[] after = new int[12];
for (int i = 1; i <=5; i++) {
/*
Math.random():[0,1)的小数
Math.random() * front.length:[0,front.length)的小数
(int)(Math.random() * front.length):[0,front.length)的整数,[0,front.length-1]
*/
int index;
do{
index = (int)(Math.random() * front.length);//0-35
}while(front[index]==1);
front[index] = 1;
}
for (int i = 1; i <=2; i++) {
int index;
do{
index = (int)(Math.random() * after.length);
}while(after[index]==1);
after[index] = 1;
}
System.out.println("本期大乐透中奖号码:");
System.out.print("前区号码为:");
for (int i = 0; i < front.length; i++) {
if(front[i] == 1){
System.out.print(i+1+"\t");
}
}
System.out.print("\n后区号码为:");
for (int i = 0; i < after.length; i++) {
if(after[i] == 1){
System.out.print(i+1+"\t");
}
}
System.out.println();
}
}
12、统计字符出现次数
英语中最长的单词是"pneumonoultramicroscopicsilicovolcanoconiosis",意思是“肺尘病,矽肺病”,一共有45个英文字母。现在要求统计这个单词中出现了哪些字母,以及它们出现的次数,并且找出出现次数最多的字母。
开发提示:
(1)使用String类型的变量words存储英语单词"pneumonoultramicroscopicsilicovolcanoconiosis"
(2)通过word.toCharArray()可以根据字符串word得到一个char[]类型的数组。
其中toCharArray()是String类型提供的系统函数,就像Math.random()等函数一样,后面会学到,这里先提前用一下。它的作用就是创建一个char[]数组,并把字符串中的每一个字符依次存储到这个char[]数组中。
//以"hello"为例
String word = "hello";
char[] wordCharArray = word.toCharArray();
//此时wordCharArray字符数组内容是 {‘h','e','l','l','o'}
(3)声明一个int类型的数组counts,长度为26,分别用来记录26个字母出现的次数,counts[0]记录的是'a'字母的次数,counts[1]记录的是'b'字母的次数,依次类推。
public class Homowork12 {
public static void main(String[] args) {
String word = "pneumonoultramicroscopicsilicovolcanoconiosis";
char[] wordCharArray = word.toCharArray();
//[p,n,e,u,m,o,n,o,u,l,t,r,a,m,i,c,r,o,s,c,o,p,i,c,s,i,l,i,c,o,v,o,l,c,a,n,o,c,o,n,i,o,s,i,s]
int[] counts = new int[26];
for (int i = 0; i < wordCharArray.length; i++) {
counts[wordCharArray[i]-97]++;
}
int max = counts[0];
for (int i = 1; i < counts.length; i++) {
if(counts[i] > max){
max = counts[i];
}
}
System.out.println("单词中出现了如下字母:");
for (int i = 0; i < counts.length; i++) {
if(counts[i] != 0){
System.out.println((char)(i+97) +":" + counts[i]);
}
}
System.out.print("出现次数最多的字母是:");
for (int i = 0; i < counts.length; i++) {
if(max == counts[i]){
System.out.print((char)(i+97) + "\t");
}
}
System.out.println();
}
}
13、统计低于平均分的学生人数
先从键盘输入本组学员的人数,再从键盘输入本组学员的姓名和成绩,最后统计:
- 本组学员的平均分,
- 低于平均分的学员人数,
- 哪些学员低于平均分,
- 最高分和最低分分别是谁。
import java.util.Scanner;
public class Homowork1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请录入本组学员人数:");
int count = input.nextInt();
int[] grades = new int[count];
String[] names = new String[count];
for (int i = 0; i < grades.length; i++) {
System.out.print("第" + (i+1) + "个学员的姓名:");
names[i] = input.next();
System.out.print("第" + (i+1) + "个学员的成绩:");
grades[i] = input.nextInt();
}
input.close();
//学员姓名和成绩
System.out.println("所有学员的成绩如下:");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i] + ":" + grades[i]);
}
//找出最高分、最低分、累加总分,计算平均分
int max = grades[0];
int min = grades[0];
double sum = 0;
for (int i = 1; i < grades.length; i++) {
if(grades[i] > max){
max = grades[i];
}
if(grades[i] < min){
min = grades[i];
}
sum += grades[i];
}
double avg = sum/grades.length;
//输出结果
System.out.println("最高分成绩是:" + max);
System.out.println("最第分成绩是:" + min);
System.out.println("平均分成绩是:" + avg);
System.out.println("获得最高分的有:");
for (int i = 0; i < names.length; i++) {
if(max == grades[i]){
System.out.println(names[i]);
}
}
System.out.println("获得最第分的有:");
for (int i = 0; i < names.length; i++) {
if(min == grades[i]){
System.out.println(names[i]);
}
}
System.out.println("低于平均分的有:");
int total = 0;
for (int i = 0; i < names.length; i++) {
if(grades[i] < avg){
System.out.println(names[i]);
total++;
}
}
System.out.println("低于平均分的一共有:" + total +"人");
}
}