java周学习总结

本周学习了Java的基本语法:
标识符、变量类型、关键字
包括几种结构:顺序结构、选择结构、循环结构。
选择结构的if{}else{}和switch多分支选择结构。
循环结构的while、do…while、for。
输出System.out.print和输入要引用实例化类static Scanner input= new Scanner(System.in);
除输入输出和一些变量的定义外语法基本与C语言相同。
本周学习总结主要是回顾本周做的两个小练习的思路走向,当初是如何一步一步直到完善整个程序。

1.万年历

万年历从1900年1月1日星期一开始计算,计算输入的年份月份的第一天到1900年1月1日有多少天,再用天数判断是星期几,则在前面相应输出几个空格代表该月1日从星期几开始,再判断该月有多少天。
先定义要输入的年份月份,然后创建一个循环从1900年开始计算到输入年份有多少年每年有多少天

for (int i = 1900; i < year; i++) {
			if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))	{
				sum += 366;
			}
			else{
				sum+=365;
			}
			}

这里要注意循环条件不能等于输入年份,该年要输出的月份要另外计算。
接下来是判断年头1月1日到输入月份的1日有多少天

if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))	{
			switch (month) {
			case 1: sum+=0;break;
			case 2: sum+=31;break;
			case 3:sum+=60;break;
			case 4:sum+=91;break;
			case 5:sum+=121;break;
			case 6:sum+=152;break;
			case 7:sum+=182;break;
			case 8:sum+=213;break;
			case 9:sum+=244;break;
			case 10:sum+=274;break;
			case 11:sum+=305;break;
			case 12:sum+=335;break;
			}
		}
		else{
		switch (month) {
		case 1: sum+=0;break;
		case 2: sum+=31;break;
		case 3:sum+=59;break;
		case 4:sum+=90;break;
		case 5:sum+=120;break;
		case 6:sum+=151;break;
		case 7:sum+=182;break;
		case 8:sum+=212;break;
		case 9:sum+=243;break;
		case 10:sum+=273;break;
		case 11:sum+=304;break;
		case 12:sum+=334;break;
		}
		}

用天数取余判断本月第一天是星期几

System.out.println("当前输入的天数距1900年"+sum+"天");
		int temp=sum%7+1;
		switch (temp) {
		case 1:System.out.println("星期一");
			break;
		case 2:System.out.println("星期二");
			break;
		case 3:System.out.println("星期三");
			break;
		case 4:System.out.println("星期四");
			break;
		case 5:System.out.println("星期五");
			break;
		case 6:System.out.println("星期六");
			break;
		case 7:System.out.println("星期日");
			break;
		}

判断条件+1是不断调试的结果,若7刚好被整除余0就会无匹配项。
然后把输入月份的天数通过switch提出来存到天数变量day
最后是输出

for (int j = 1; j <=42; j++) {
			if(jishu%7==0){System.out.println("\n");}
			if(temp!=0){
				System.out.print("\t");temp--;
			}
			else{
				System.out.print("\t"+count);
				count++;
			}
			jishu++;
			if(count>day) break;
			
		}

这里j小于等于42是代表要输出的格子数,因为试了很多遍单凭一个J变量无法完成输出的同时换行并且刚好在等于day的情况下跳出循环,所以这里用到了另外两个变量 count要输出的天数,每输出一次自增1,jishu换行变量 每输出满7次换行。
(PS:以上代码只是粗略的贴出来的,有些外部自增自减的调试细节没有贴上去)

2.管理系统

要求:该系统要有新增、删除、修改、借出、归还、查找功能。
在主类中先定义好要用来存放表格形式数据的二维数组,数组要有四个字段,编号、名称、状态、日期。
首先,因为要有六个功能,这里准备用switch创建六个分支,一个分支代表一个功能,为了代码条理分明主方法的switch只调用写六个功能对应的六个方法。
首先是新增的写法

String name;		//需要输入的名字
		boolean  state=true;	//1可借  0已借出
		Date date =new Date();	//日期
		System.out.println("输入一个名称");
		 name = input.next();
		 for (int i = 0; i <=count; i++) {
			 str[count][0] = String.valueOf(id[count]=count);
			 str[count][1] = name;
			 if(state){
			 str[count][2] = "可借";}
			 else{ str[count][2] = "已借出";}
			 str[count][3] =String.valueOf(date);
		}
		 System.out.println("添加完成");
	    count++;

因为定义的数组是String类型的所以这里编号用到强制转换String.valueOf。因为日期的转换代码太多而且百度有就不贴出来饿了,count是在所有方法外定义的公共自增变量每次执行完新增方法进行自增。
下一个是查找,这里查找只是显示所有字段信息

System.out.println("\t序号\t名称\t状态\t日期\t次数");
		
		for (int i = 1; i <=count-1; i++) {
			if(str[i][0]!=null){
			for (int j = 0; j < 4; j++) {
				System.out.print("\t"+str[i][j]);
			}
			System.out.println("");
		}
		}

这段代码很简单,只是嵌套两层循环输出二维数组信息,因为定义的数组是一百行的所以加个条件,输出不为空的行。
接下来是写删除,删除想要删除的行,其实是将这一行的数据都换成空值,并将下一行的数据往上移一次,用循环直至将该行之后的所有数据向前移一行,又因为查找不会输出空的行就可以完美的实现删除。

System.out.println("输入要删除的行号");
		int del = input.nextInt();
		if(str[del][2]=="已借出"){System.out.println("已借出不可删除");}
		else{
		for(int i=1 ;i<count;i++)
		{if(del==id[i])
		{
			for (int j = 0; j < count-1; j++) {
				 str[del][0] = null;
				 str[del][1] = null;
				 str[del][2] = null;
				 str[del][3] = null;
			}
			
		}
		}
		for(int j2=0;j2<=count;j2++){
			if (str[j2][0]==null) {
				str[j2][0]=String.valueOf(id[j2+1]-1) ;
				str[j2][1]=str[j2+1][1];
				str[j2][2]=str[j2+1][2];
				str[j2][3]=str[j2+1][3];
				
			}
			if(str[j2+1][0]==str[j2][0]){
				str[j2+1][0]=null;
				str[j2+1][1]=null;
				str[j2+1][2]=null;
				str[j2+1][3]=null;
			}
		}
		count--;
		System.out.println("删除成功");
	}

写到这里时发现要执行删除操作要将前面的编号减一,执行count–可能会造成所有行编号的变动所以特意新加了一个一维数组id[]用来存放编号。后面的借出、归还、修改的寻找方式与删除功能的主要代码基本相同就不贴出来了。
就此,本周两个练习的思路回顾到此结束。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值