巩固题
1、5个一行输出1-100之间的偶数
(1)输出1-100偶数,
(2)要求:每5个偶数一行,一行中的每个偶数数字之间使用逗号分隔
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;
double paper = 0.1;
while(paper < 8848860){ //循环判断纸的高度是否高于珠穆朗玛峰
paper *= 2;
count++; //循环中执行累加,对应折叠多少次
}
System.out.println(count); //打印折叠次数
/* int count = 0;
//定义珠穆朗玛峰的高度
int zf = 8848860;//单位毫米
//循环的执行过程中每次纸张折叠,纸张的厚度要加倍
for(double paper = 0.1; paper < zf; paper *= 2){
//在循环中执行累加,对应折叠了多少次
count++;
System.out.println(paper);
}
//打印计数器的值
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) {
/*
1
12
123
1234
12345
*/
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j);
}
System.out.println();
}
/* 1
22
333
4444
55555*/
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i);
}
System.out.println();
}
/* 1
222
33333
4444444
555555555
*/
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 scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
System.out.println("请输入日期");
int day = scanner.nextInt();
scanner.close();
int totaldays = 0; //这是总天数
switch (month) {
case 12:
//累加的1-11月
totaldays += 30;//这个30是代表11月份的满月天数
//这里没有break,继续往下走
case 11:
//累加的1-10月
totaldays += 31;//这个31是代表10月的满月天数
//这里没有break,继续往下走
case 10:
totaldays += 30;//9月
case 9:
totaldays += 31;//8月
case 8:
totaldays += 31;//7月
case 7:
totaldays += 30;//6月
case 6:
totaldays += 31;//5月
case 5:
totaldays += 30;//4月
case 4:
totaldays += 31;//3月
case 3:
totaldays += 28;//2月
//在这里考虑是否可能是29天
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
totaldays++;//多加1天
}
case 2:
totaldays += 31;//1月
case 1:
totaldays += day;//第month月的day天
}
System.out.println("今天是一年的第" + totaldays + "天");
}
}
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 scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
System.out.println("请输入日期");
int day = scanner.nextInt();
scanner.close();
int totaldays = 0; //这是总天数
switch (month) {
case 12:
//累加的1-11月
totaldays += 30;//这个30是代表11月份的满月天数
//这里没有break,继续往下走
case 11:
//累加的1-10月
totaldays += 31;//这个31是代表10月的满月天数
//这里没有break,继续往下走
case 10:
totaldays += 30;//9月
case 9:
totaldays += 31;//8月
case 8:
totaldays += 31;//7月
case 7:
totaldays += 30;//6月
case 6:
totaldays += 31;//5月
case 5:
totaldays += 30;//4月
case 4:
totaldays += 31;//3月
case 3:
totaldays += 28;//2月
//在这里考虑是否可能是29天
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
totaldays++;//多加1天
}
case 2:
totaldays += 31;//1月
case 1:
totaldays += day;//第month月的day天
}
int cylce = totaldays % 5; //利用cycle判断今天是打鱼还是晒网
if (cylce >= 1 && cylce <= 3){
System.out.println("今天是一年的第" + totaldays + "天" + ",今天应该打鱼");
}
else if(cylce == 4 || cylce == 0){
System.out.println("今天是一年的第" + totaldays + "天" + ",今天应该晒网");
}
}
}
3、打印『X』对称图形
案例效果图:
开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,一个内循环控制输出内容
- 在内循环中,根据变量的变化规律,判断输出"O"还是"*"
参考答案:
public class Homework7 {
public static void main(String[] args) {
for(int i =1;i<=7;i++){
for(int j =1;j<=7;j++){
if(i==j || i==8-j){
System.out.print("o");
}else{
System.out.print("*");
}
}
System.out.println();
}
}
}
4、打印空心菱形
案例效果图:
开发提示:
- 平面图形涉及到有行有列,考虑到嵌套for循环
- 一个外循环控制行,两个内循环控制输出内容
- 一个内循环负责输出空格,另一个内循环输出"*"或空格
案例需求:
public class Homework8 {
public static void main(String[] args) {
/*i=1 j=5
i=2,j=4,j=6
i=3,j=3,j=7
*/
for(int i = 0;i<9;i++){
for(int j=0;j<9;j++){
if(i+j==4||Math.abs(i-j)==4||i+j==12){
System.out.print("* ");
}else{
System.out.print(" ");
}
}System.out.println();
}
}
}
public static void main(String[] args) {
/*i=1 j=5
i=2,j=4,j=6
i=3,j=3,j=7
*/
for(int i = 0;i<9;i++){
for(int j=0;j<9;j++){
if(i+j==4||Math.abs(i-j)==4||i+j==12){
System.out.print("* ");
}else{
System.out.print(" ");
}
}System.out.println();
}
}
}