i是数组下标位数,默认从0开始
for (int i=(month-1)*4;i<month*4;i++)
如果month是2,那就是2月,那我们是不是从第5周到第8周,所以i = month-1=1*4=4,i<8, i 指的是下标:实际上就是5-8周
因为每个月是4周,我们要算出是第几个月,就用第几周除以4就好啦,不过我们还要考虑int只能存储整形,所以当有余数的时候就再加上1,比如是第五天,int型的5/4就会余下来一周,那么这一周已经是下一个月的了,所以加上1就好啦!
sasaa
代码运行逻辑没有问题,仅提供些许建议
类名首字母最好按规范命名为大写;
提示用户输入第几周,实际为n+1周, 输入0代表第一周,不大合适, 最好是1-35, 然后判断来减1
for循环语句,直接采用 for(int i = 0; i < 4; i++)即可,在里面判断是否超限,然后continue,代码会更加美观
最后写了try catch捕获了异常
点重置代码
输入判断是从业务流程上避免异常出现,try catch是在异常出现时的处理,异常实际是程序出现了不正常的结果,能在业务流程上避免异常出现肯定最好了
第一个在类的声明前面加一行
import java.util.Scanner;
第二个0打成o了
之所以 int i = (month - 1 *4), 是因为一个月有四周,需要从0开始,3结束。就像这样:
0~3: 代表第一个月的四周课程
4~7 :代表第二个月的四周课程
..........
周期性的循环,得出当前月对应的课程计划
String[] contentList = new String[35]; contentList[0] = "【第1周】环境搭建与语法入门"; contentList[1] = "【第2周】Java语法之循环、数组与方法"; contentList[2] = "【第3周】面向对象之封装与继承"; contentList[3] = "【第4周】面向对象之单例模式与多态"; contentList[4] = "【第5周】常用工具类(上)"; contentList[5] = "【第6周】常用工具类(下)"; contentList[6] = "【第7周】常用工具类(下)"; contentList[7] = "【第8周】前端基础之HTML与CSS"; contentList[8] = "【第9周】前端基础之JavaScript与综合案例"; contentList[9] = "【第10周】Java Web基础"; contentList[10] = "【第11周】Java Web基础"; contentList[11] = "【第12周】常用功能与过滤器"; contentList[12] = "【第13周】监听器与项目实战"; contentList[13] = "【第14周】监听器与项目实战"; contentList[14] = "【第15周】MySQL基础"; contentList[15] = "【第16周】MySQL基础"; contentList[16] = "【第17周】Java数据库开发基础"; contentList[17] = "【第18周】框架前置知识"; contentList[18] = "【第19周】MyBatis基础"; contentList[19] = "【第20周】MyBatis实现OA系统项目实战"; contentList[20] = "【第21周】MyBatis实现OA系统项目实战"; contentList[21] = "【第22周】Linux环境搭建与Redis应用"; contentList[22] = "【第23周】Spring基础"; contentList[23] = "【第24周】Spring基础"; contentList[24] = "【第25周】Spring基础"; contentList[25] = "【第26周】SSM开发社交网站"; contentList[26] = "【第27周】Spring Boot电商项目实战"; contentList[27] = "【第28周】Spring Boot电商项目实战"; contentList[28] = "【第29周】面试"; contentList[29] = "【第30周】多线程与分布式"; contentList[30] = "【第31周】多线程与分布式"; contentList[31] = "【第32周】Spring Cloud基础"; contentList[32] = "【第33周】Spring Cloud电商实战"; contentList[33] = "【第34周】Spring Cloud电商实战"; contentList[34] = "【第35周】Zookeeper+Dubbo应用与面试"; //提示信息 System.out.print("您要开始第几周学习啦,直接输入数字吧:"); //设置变量存储接收到的数据 int weekNum = new Scanner(System.in).nextInt(); int monthNum; if(weekNum%4==0) { monthNum = (weekNum / 4); }else { monthNum = (weekNum / 4)+1; } //计算今天是几月(1-月第一周、4-月第4周) //计算输入的周是这个月的第几周 //提示信息 System.out.println("以下是您第"+monthNum+"个月的学习计划, √ 代表当周学习任务"); System.out.println("======================================="); try{ //利用for循环,找到数组中对应这个月的内容输出 for(int i=(monthNum-1)*4;i<(monthNum-1)*4+4;i++){ if(i==weekNum-1) { System.out.print("√"); } System.out.println(contentList[i]); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("这个时候你早就学完了,草"); }
老师 我已经找到了,找到答案了 是/这个的问题
W=1的情况下,由于你定义的month是int类型(也就是整数型),因此,在W=1的情况下,mounth=w/4;mounth取值为0,而不是0.25,只有在你mounth定义为double(双精度浮点数,也可以理解成显示小数的类型,当然这里的小数说法不准确)类型的时候,mounth才会显示为0.25,可是并没有0.25月的说法,所以mounth只能定义为int类型。
但是W=1表示的是第一个周,属于第一个月,而上面我们month=w/4中mounth的取值为0,所以,在周数(W)不能被4整除的情况下,月度month应该要+1才能真实的表示实际月份:mounth = w / 4 + 1;
上面的条件判读部分已经写出来了:
if(w%4==0) { //这部分的意思是周数W是否能被4整除,如果能则执行mounth=w/4;
mounth = w / 4;
}
else
{ //这里表示如果不能整除,则执行mounth = w / 4 + 1;
mounth = w / 4 + 1;
}
因为输入35,对应的是第九个月的学习内容,按照输出四周学习内容的设定,会继续输出第36周。但数组只给到35周的内容,所以还是会越界报错。
同意,这才是最好的答案。
或者你这样写也行
for(int i =(month -1)*4;i<month*4;i++){ if (i>34){ break; }else if (i ==(w -1)){ System.out.println("√" +contentList[i]); }else { System.out.println(contentList[i]); } }