Java基础之:数组练习题

Java基础之:数组练习题

第一题

		//1. 循环打印输入的月份的天数。 【使用continue实现】
		//	–	要有判断输入的月份是否错误的语句 
import java.util.Scanner;	
public class HomeWork1
{
	public static void main(String[] args){

		Scanner input = new Scanner(System.in);
		int year,month,day;
		boolean flag = false;
		String temp;
		do{
			System.out.println("请输入年月日:");
			year = input.nextInt();
			month = input.nextInt();
			day = input.nextInt();

			if(!(month >= 1 && month <=12)){
				System.out.println("输入月份不正确!");
				continue;
			}else{
				if(!(day >= 0)){
					System.out.println("输入日期不正确!");
					continue;
				}else{
					//1、3、5、7、8、10、12月每月31天,4、6、9、11月每月30天 ,2月28天
					switch(month){
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:
						case 12:
							if(!(day <= 31)){
								System.out.println("输入日期不正确!");
							}else{
								System.out.printf("输入日期为:%d年%d月%d日\n",year,month,day);
							}
							break;
						case 4:
						case 6:
						case 9:
						case 11:
							if(!(day <= 30)){
								System.out.println("输入日期不正确!");
							}else{
								System.out.printf("输入日期为:%d年%d月%d日\n",year,month,day);
							}
							break;
						case 2:
							if(!(day <= 28)){
								System.out.println("输入日期不正确!");
							}else{
								System.out.printf("输入日期为:%d年%d月%d日\n",year,month,day);
							}
							break;
					}
				}
			}

			System.out.println("是否继续输入?(Y/N)");
			temp = input.next();
			if("Y".equalsIgnoreCase(temp)){
				flag = true;
			}else if ("N".equalsIgnoreCase(temp)){ 
				flag = false;
			}else{
				System.out.println("输入错误!");
				break;
			}
		}while(flag);
		
		System.out.println("程序结束!");
	}
}

  

 

 

 

第二题

/**
	2. 随机猜数游戏: 【选做】
	随机生成一个1——100的整数 
	有十次机会 
	如果第一次就猜中,提示 “你真是个天才” 
	如果第2——3次猜中,提示“你很聪明,赶上我了” 
	如果第4——9次猜中,提示“一般般” 
	如果最后一次猜中,提示“可算猜对啦” 
	一次都没猜对,提示“说你点啥好呢” 
	【嵌套循环】
*/
import java.util.Scanner;	
public class HomeWork2
{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		int  inGuess = 0;
		int  guessNumber = (int)(Math.random()*100) + 1;//这里一定要加一,因为random是[0,1)的随机数
		for(int i = 1 ; i <= 10 ; i++){
			System.out.printf("请输入你猜的数(1-100),还有%d次机会哦:\n",10-i);
			inGuess = input.nextInt();
			if(inGuess == guessNumber){
				if(i == 1){
					System.out.println("你可真是天才!");
					break;
				}else if(i<=3){
					System.out.println("你很聪明,赶上我了!");
					break;
				}else if(i<=9){
					System.out.println("一般般!");
					break;
				}else if(i == 10){
					System.out.println("可算猜对啦!");
					break;
				}
			}else{
				if(!(i == 10)){
					if(inGuess > guessNumber){
						System.out.println("大了");
					}else{
						System.out.println("小了");
					}
					continue;
				}else{
					System.out.println("说你点啥好呢!答案是:"+ guessNumber);
				}
			}
		}
	}
}

  

第三题

/**
	输出100以内的所有素数(只能被1和自己整除的数, 1不是素数),每行显示5个;并求和。
	sqrt()开平方
*/
import java.util.Scanner;	
public class HomeWork3
{
	public static void main(String[] args){
		int sum = 0;
		int count = 1;
		boolean flag = true;	//默认每个数都是素数
		for(int i = 2 ; i <= 100 ; i++){	//1不是素数从2开始判断
			//每次都需要重置flag , 因为flag标志了这个数是否为素数,所以每循环一个数就要重置一次
			flag = true;

			for(int j = 2 ; j < (i/2+1) ; j++){	//这里可以只取j-i之间范围的一半,因为后一半 等于 前一半*2
				if(i % j == 0){
					flag = false;	//若这个数不是素数则改变flag
					break;
				}
			}

			if(!flag){
				continue;
			}else{
				sum += i;
				if(count != 5){
					System.out.printf(i + "\t");
					count++;
				}else{
					System.out.println(i);
					count = 1;	//重置count  这个是计算每行输出了多少个元素的变量
				}
			}
		}
		System.out.println();
		System.out.println("所有素数之和为:" + sum);
	}
}

  

 

 

第四题

/**
	 中国有句俗语叫“三天打鱼两天晒网”。
	 如果从1990年1月1日起开始执行“三天打鱼两天晒网”。
	 如何判断在以后的某一天中是“打鱼”还是“晒网”?(年,月,日是输入的.) 

	 这里假设输入的日期都是正确的

	 思路:
	 1.首先计算从当前日期到1990年1月1日一共有多少天
	 2.用总天数 对 5取模。
*/
import java.util.Scanner;	
public class HomeWork4
{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		System.out.println("请输入年月日:");
		int year = input.nextInt();
		int month = input.nextInt();
		int day = input.nextInt();
		int totalDay = 0 ; //累计记录从输入日期到1990/1/1有多少天

		for(int i = 1990 ; i < year ;i++){	//计算年
			if(i % 400 == 0 || i % 4 ==0 && i % 100 != 0 ){
				totalDay += 366;
			}else{
				totalDay += 365;
			}
		}
		
		//计算月 方式1
//		for(int i = 1 ; i < month; i++){	//计算月	
//			switch(i){ 
//				//1、3、5、7、8、10、12月每月31天,4、6、9、11月每月30天 ,2月28天
//				case 1:
//				case 3:
//				case 5:
//				case 7:
//				case 8:
//				case 10:
//				case 12:
//					totalDay += 31;
//					break;
//				case 4:
//				case 6:
//				case 9:
//				case 11:
//					totalDay += 30;
//					break;
//				case 2:		//由于当前年没有判断闰年 所以这里还是需要考虑
//					if(year % 400 == 0 || year % 4 ==0 && year % 100 != 0 ){
//						totalDay += 29;
//					}else{
//						totalDay += 28;
//					}
//					break;
//			}
//		}

		//第二种计算月的方式,不使用循环,进行了优化,但影响不大,因为月份只有1-11
		switch(month - 1){	//当前月份不用计算天数,此方法充分利用的"穿透"的特性!
			//12月不用计算
			case 11:
				totalDay += 30;
			case 10:
				totalDay += 31;
			case 9:
				totalDay += 30;
			case 8:
				totalDay += 31;
			case 7:
				totalDay += 31;
			case 6:
				totalDay += 30;
			case 5:
				totalDay += 31;
			case 4:
				totalDay += 30;
			case 3:
				totalDay += 31;
			case 2:
				if(year % 400 == 0 || year % 4 ==0 && year % 100 != 0 ){
					totalDay += 29;
				}else{
					totalDay += 28;
				}
			case 1:
				totalDay += 31;
		}

		totalDay += day;	//计算日

//		if(totalDay % 5 >= 1 && totalDay % 5 <= 3){
//			System.out.printf("%d年%d月%d日这天在 打鱼!\n",year,month,day);
//		}else{
//			System.out.printf("%d年%d月%d日这天在 晒网!\n",year,month,day);
//		}
		
		switch(totalDay % 5){
			case 1:
			case 2:
			case 3:
				System.out.printf("%d年%d月%d日这天在 打鱼!\n",year,month,day);
				break;
			default:
				System.out.printf("%d年%d月%d日这天在 晒网!\n",year,month,day);
		}
	}
}

  

 

posted @ 2020-11-22 09:04  奋斗的小范同学  阅读(632)  评论(0编辑  收藏  举报