文章目录
- 巩固题
- 1、5个一行输出1-100之间的偶数
- 2、趣味折纸
- 3、实现输出如下任一个数字三角形
- 4、计算这一天是这一年的第几天
- 拔高题
- 1、计算这一天是这一年的第几天
- 2、计算这一天是在打鱼还是晒网
- 3、打印『X』对称图形
- 4、打印空心菱形
巩固题
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++){
//在循环中执行累加,对应折叠了多少次
}
double paper = 0.1;
while(true) {
count++;
paper *= 2;
if(paper >= zf) break;
}
//打印计数器的值
System.out.println("需要折叠:" + count + "次");
}
}
3、实现输出如下任一个数字三角形
案例需求:请用循环输出如下数字三角形
1
12
123
1234
12345
或
1
22
333
4444
55555
或
1
222
33333
4444444
555555555
参考答案:
public class Homework3 {
public static void main(String[] args) {
for (int i = 1; i <= 5 ; i++) {
for (int j = 1; j <=i ; j++) {
System.out.print(j);
}
System.out.println();
}
}
}
public class Homework3 {
public static void main(String[] args) {
for (int i = 1; i <= 5 ; i++) {
for (int j = 1; j <=i ; j++) {
System.out.print(i);
}
System.out.println();
}
}
}
public class Homework3 {
public static void main(String[] args) {
for (int i = 1; i <= 5 ; i++) {
for(int j=4; j>=i; j--){
System.out.print(" ");
}
for(int j=1; j<=2*i-1; j++){
System.out.print(i);
}
System.out.println();
}
}
}
4、计算这一天是这一年的第几天
案例需求:从键盘分别输入年、月、日,使用循环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 Homework4 {
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 + "天");
}
}
拔高题
1、计算这一天是这一年的第几天
案例需求:
(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 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 > 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 + "天");
}
}
2、计算这一天是在打鱼还是晒网
案例需求:
(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 Homework6 {
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("晒网");
}
}
}
3、打印『X』对称图形
案例效果图:
开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,一个内循环控制输出内容
- 在内循环中,根据变量的变化规律,判断输出"O"还是"*"
参考答案:
public class Homework7 {
public static void main(String[] args){
for(int i=1; i<=7; i++){//控制行数
//(1)打印该行的*或o
/*
发现O+*的总个数是7个
当i=1, 当j=1和j=7的时候是O,其余的是*
当i=2, 当j=2和j=6的时候是O,其余的是*
当i=3, 当j=3和j=5的时候是O,其余的是*
当i=4, 当j=4的时候是O,其余的是*
当i=5, 当j=5和j=3的时候是O,其余的是*
当i=6, 当j=6和j=2的时候是O,其余的是*
当i=7, 当j=7和j=1的时候是O,其余的是*
*/
for(int j=1; j<=7; j++){
if(i==j || i==8-j){
System.out.print("O");
}else{
System.out.print("*");
}
}
//(2)每一行的最后一件事是换行
System.out.println();
}
}
}
4、打印空心菱形
案例效果图:
开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,两个内循环控制输出内容
- 一个内循环负责输出空格,另一个内循环输出"*"或空格
案例需求:
public class Homework8 {
public static void main(String[] args){
//上半部分:正的等腰三角形
//5行
for(int i=1; i<=5; i++){
//(1)打印空格
/*
当i=1,打印4个空格,j=4,3,2,1 j>=i
当i=2,打印3个空格,j=4,3,2
当i=3,打印2个空格,j=4,3
当i=4,打印1个空格,j=4
当i=5,打印0个空格,j=4,让循环条件一次都不满足
*/
for(int j=4; j>=i; j--){
System.out.print(" ");
}
//(2)打印*
/*
当i=1,打印1个,j=1 j<=2*i-1
当i=2,打印3个,j=1,2,3,
当i=3,打印5个,j=1,2,3,4,5
当i=4,打印7个,j=1,2,3,4,5,6,7
当i=5,打印9个,j=1,2,3,4,5,6,7,8,9
*/
for(int j=1; j<=2*i-1; j++){
//不是全部打印*
if(j==1 || j==2*i-1){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
//(3)换行
System.out.println();
}
//下半部分:倒立的等腰三角形
//4行
for(int i=1; i<=4; i++){
//(1)打印空格
/*
当i=1,1个空格,j=1 j<=i
当i=2,2个空格,j=1,2
当i=3,3个空格,j=1,2,3
当i=4,4个空格,j=1,2,3,4
*/
for(int j=1; j<=i; j++){
System.out.print(" ");
}
//(2)打印*
/*
当i=1,7个*,j=1,2,3,4,5,6,7 j<=9-2*i;
当i=2,5个*,j=1,2,3,4,5
当i=3,3个*,j=1,2,3
当i=4,1个*,j=1
*/
for(int j=1; j<=9-2*i; j++){
//不是全部打印*
if(j==1 || j==9-2*i){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
//(3)换行
System.out.println();
}
}
}