1.三天打鱼,两天晒网
·有个人从2000年1月1日开始,三天打鱼,两天晒网,那么输入一个日期之后,根据年月日来判断这个人当天是在打渔还是在晒网
·思路:因为三天打鱼两天晒网,可以看作用5天作为一个组合。那么,就通过计算从2000年1月1日开始,到当前输入日期为止经历的总天数。再利用总天数除以5,通过余数来判断那天这个人在干嘛。
(1)通过输入的年份,来跟2000年计算,一共过了多少个整年(计算过程中要小心闰年)
(2)通过输入的月份,来计算当前输入年份里已经过了几个月(计算过程中也要小心闰年,即二月份的天数)
(3)通过输入的日期,加上之前算出来的经过年数、月数,一起算出到输入年月日为止一共度过了多少天数
·代码部分:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
//输入日期
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int year = input.nextInt();
System.out.println("请输入月份:");
int month = input.nextInt();
System.out.println("请输入日期:");
int day = input.nextInt();
//记录总天数
int days = 0;
//计算当前输入日期和开始日期2000年1月1日之间的总天数
//计算经过了多少个整年
int yearCount = year-2000;
days+=yearCount*365;
//判断经过的这些整年中又有多少个闰年
for(int i =2000;i<year;i++){
//判断是否是闰年
if((i%4==0&&i%100!=0)||i%400==0){
//闰年的时候,天数要加一天(闰年一年366天)
days+=1;
}
}
//计算输入的月份在当年经过的天数
for(int i =1;i<month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
days+=31;
break;
case 4:
case 6:
case 9:
case 11:
days+=30;
break;
case 2:
//判断输入的年份是否是闰年,来判断当年2月份是28天还是29天
if((year%4==0&&year%100!=0)||year%400==0){
//闰年的天数要增加一天
days+=29;
}else{
days+=28;
}
}
}
//再加上当月的天数
days+=day;
System.out.println("获得总天数:"+days+“天”)
//三天打鱼,两天晒网 周期是5天,所以用总天数除以5,求余数,通过余数就可以知道当前日期是5天里的哪一天了
int re = days%5;
if(re==4||re==0){
System.out.println(year+"年"+month+"月"+day+"日这天,这个人在晒网");
}else{
System.out.println(year+"年"+month+"月"+day+"日这天,这个人在打鱼");
}
}
}
2.利用双重/多重循环打印图形
·双重循环:一个循环体内又包含了另外一个循环
·多重循环:双重循环里又包含了一个循环
·各循环可互相嵌套,不过一般不超过3层;外层循环变量变化一次,内层循环就整个跑一遍
(1)打印矩形
·要点:外层循环控制行数,内层循环控制列数
public class Test{
public static void main(String[] args){
for(i=0;i<5;i++){
for(j=0;j<5;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(2)打印直角三角形
public class Test{
public static void main(String[] args){
for(int i =0;i<5;i++){
for(int j=0;j<=i;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(3) 打印平行四边形
·要点:可以先在左边打印一个空白的直角三角形,然后紧跟着打印一个矩形,把矩形挤成平行四边形
public class Test{
public static void main(String[] args){
for(int i =0;i<5;i++){
//打印一个空的直角三角形
for(int k=0;k<i+1;k++){
System.out.print(" ");
}
//再打印一个矩形
for(int j =0;j<5;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(4)打印倒三角形
public class Test{
public static void main(String[] args){
for(int i =0;i<5;i++){
for(int j=0;j<5-i;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(5) 打印平行四边形2
·思路:先在左边打印一个空的倒三角形,然后在右边打印一个矩形,就可以挤出向另外一边的平行四边形
public class Test{
public static void main(String[] args){
for(int i=0;i<5;i++){
//打印倒三角
for(int j=0;j<5-i;j++){
System.out.print(" ");
}
//打印矩形
for(int k = 0;k<5;k++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(6)打印等腰三角形
·要点:先在左边打印一个空的倒三角,然后跟着再打印一个直角三角形
public class Test{
public static void main(String[] args){
for(int i =0;i<5;i++){
//打印空的倒三角
for(int j =0;j<4-i;j++){
System.out.print(" ");
}
//打印一个直角三角形
for(int k =0;k<i*2+1;k++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(7) 打印菱形
·要点:先打印等腰三角形作为上半部分,然后再打印一个倒的等腰三角形作为下半部分
public class Test{
public static void main(String[] args){
//打印上半部分
for(int i =0;i<5;i++){
for(int j=0;j<5-i;j++){
System.out.print(" ");
}
for(int k=0;k<i*2+1;k++){
System.out.print("* ");
}
System.out.println();
}
//打印下半部分
for(int i=3;i>=0;i--){
for(int j=0;j<5-i;j++){
System.out.print(" ");
}
for(int k=0;k<i*2+1;k++){
System.out.print("* ");
}
System.out.println();
}
}
}
·打印结果
(8)打印空心菱形
·要点:在打印菱形的基础上,打印星号的时候,判断每行中开头的和结尾的星号保留,其余的打印空格
public class Test{
public static void main(String[] args){
//打印上半部分
for(int i =0;i<5;i++){
for(int j=0;j<5-i;j++){
System.out.print(" ");
}
for(int k=0;k<i*2+1;k++){
if(k==0||k==i*2) {
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
//打印下半部分
for(int i=3;i>=0;i--){
for(int j=0;j<5-i;j++){
System.out.print(" ");
}
for(int k=0;k<i*2+1;k++){
if(k==0||k==i*2) {
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
·打印结果