老师有一段代码有问题。大家看一下我分析的对不对?

来源:7-2 编程挑战解析

忆_卿

2020-09-07 00:29

http://img1.mukewang.com/5f550d8600013f8707210167.jpg图片中 for(int i=(month-1)*4;i<month*4;i++){

}这个 i<month*4;写错了, 如果输入的数值是33-35的话,运行会报错,数组下标越界,


应该这样写 for(int i=(month-1)*4;i<conteentList.lengthh;i++){}

写回答 关注

7回答

  • qq_慕姐5581389
    2020-09-12 22:19:48
    已采纳

    或者你这样写也行

    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]);
        }
    }


    慕数据399...

    这么写打印不出来多少周没有数据的正确结果呀

    2020-10-03 16:28:40

    共 2 条回复 >

  • qq_绿叶也有_0
    2021-12-19 18:17:12
    完整版的来了,后面的老铁可以借鉴哈
    package imoon;
    
    import java.util.Scanner;
    
    public class Demo02 {
        public static void main(String[] args) {
            //创建String数组,并为每一个元素赋值。赋值内容为第几周+学习内容
            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 num  = new Scanner(System.in).nextInt();
            if(num > contentList.length)
            {
                System.out.println("您输入的数字超过了你学习的周数,请重新输入");
                return;
            }
    
            //定义个变量接收月份;
            int mouth = 0;
            //定义一个变量接收周
            int zhou = 0;
    
            //计算今天是几月(1-月第一周、4-月第4周)
            if(num % 4 == 0)
            {
                mouth = num/4;
            }
            else
            {
                mouth = num/4 +1;
            }
            //计算输入的周是这个月的第几周
            zhou = num - (mouth-1) * 4;
    
            System.out.println("今天是您学习的第"+mouth+"个月,第"+zhou+"周");
            //提示信息
            System.out.println("以下是您本月的学习计划, √ 代表当周学习任务");
            System.out.println("=======================================");
    
            //利用for循环,找到数组中对应这个月的内容输出(考虑*4是否超过数组的长度)
            for(int i = (mouth -1 ) * 4;i< (mouth * 4<contentList.length ? mouth * 4 : contentList.length);i++) {
                if(i == (num-1))
                {
                    System.out.println("√"+contentList[i]);
                }
                else
                {
                    System.out.println(contentList[i]);
                }
    
            }
            //根据当前月第几周,在输出此行时,前面添加“√”
        }
    }


  • qq_慕无忌8323444
    2021-11-23 15:35:03

    http://img4.mukewang.com/619c99880001168b05690606.jpg简便写法

  • 忆_卿
    2020-09-14 21:11:09

    http://img3.mukewang.com/5f5f6b7800010a8007250391.jpg


    这是我自己后面写的以及运行结果,那个数组下标越界的解决方法 我自己写的稍微麻烦了一点 。


    package com.Imooc;


    import java.util.Scanner;


    /**

     * 

     * @author 

     * 功能:慕课网Java课程包含35周学习计划,输入周数

     * 输出:输出本月(4周)与当周的学习任务

     *

     */


    public class Day11Demo {


    public static void main(String[] args) {

    // TODO Auto-generated method stub

    String[] contentList=new String[35];//定义一个字符串数组长度为35并初始化

    contentList[0]="【第一周】java环境搭建与语法入门";

    contentList[1]="【第二周】java语法之循环,数组与方法";

    contentList[2]="【第三周】面向对象之封装与继承";

    contentList[3]="【第四周】面向对象之单例模式与多态";

    contentList[4]="【第五周】常用工具类(上)";

    contentList[5]="【第六周】常用工具类(下)";

    contentList[6]="【第七周】常用工具类(下)";

    contentList[7]="【第八周】前端基础之HTML与CSS";

    contentList[8]="【第九周】前端基础之javaScript与综合案例";

    contentList[9]="【第十周】java web基础";

    contentList[10]="【第十一周】Java web基础";

    contentList[11]="【第十二周】常用功能与过滤器";

    contentList[12]="【第十三周】监听器与实战项目";

    contentList[13]="【第十四周】监听器与实战项目";

    contentList[14]="【第十五周】MySQL基础";

    contentList[15]="【第十六周】MySQL基础";

    contentList[16]="【第十七周】java数据库开发基础";

    contentList[17]="【第十八周】框架前置知识";

    contentList[18]="【第十九周】Mybatis基础";

    contentList[19]="【第二十周】MyBatis实现OA系统项目实战";

    contentList[20]="【第二十一周】MyBatis实现OA系统项目实战";

    contentList[21]="【第二十二周】Linux环境搭建与Redis应用 ";

    contentList[22]="【第二十三周】Spring基础";

    contentList[23]="【第二十四周】Spring基础";

    contentList[24]="【第二十五周】Spring基础";

    contentList[25]="【第二十六周】SMM开发社交网站";

    contentList[26]="【第二十七周】Spring Boot电商项目实战";

    contentList[27]="【第二十八周】Spring Boot电商项目实战";

    contentList[28]="【第二十九周】面试";

    contentList[29]="【第三十周】多线程与分布式";

    contentList[30]="【第三十一周】多线程与分布式";

    contentList[31]="【第三十二周】Spring Cloud基础";

    contentList[32]="【第三十三周】Spring Cloud电商实战";

    contentList[33]="【第三十四周】Spring Cloud电商实战";

    contentList[34]="【第三十五周】Zookeeper+Dubbo应用与面试";

    System.out.println("你要开始第几周学习啦!直接输入数字吧:");

    Scanner a=new Scanner(System.in);//定义一个整型week用来接收输入的周数

    int week=a.nextInt();

    int month=0;//定义一个变量mouth代表月份,初始值为0

    while(week<=0||week>=36) {

    System.out.println("输入的周数超出范围,请重新输入:");

    week=a.nextInt();

    }

    if(week<=35&&week>0) {

    if(week%4==0) {

    month=week/4;

    }else{

    month=week/4+1;

    }

    //System.out.println(month);

    System.out.println("以下是你本月的学习计划,√代表当周的学习");

    System.out.println("===============================");

    if(week==33||week==34||week==35) {

    for(int i=(month-1)*4;i<contentList.length;i++) {

    if(i==week-1) {

    System.out.println("√"+contentList[i]);

    }

    else {

    System.out.println("  "+contentList[i]);

    }

    }

    }

    if(week>0&&week<32) {

    for(int i=(month-1)*4;i<month*4;i++) {

    if(i==week-1) {

    System.out.println("√"+contentList[i]);

    }

    else {

       System.out.println("  "+contentList[i]);

    }

    }

         }

    }

    }


    }


  • JAVA_蓝鹰
    2020-09-14 16:26:16
            //提示信息
            System.out.print("您要开始第几周学习啦,直接输入数字吧:");
            //设置变量存储接收到的数据
            int  inputnum = new Scanner(System.in).nextInt();
    
            //计算今天是几月(1-月第一周、4-月第4周)
            int m,w;
            if (inputnum % 4 != 0 ){
                m = inputnum / 4 + 1;
                w = inputnum % 4;
            }else{
                m = inputnum / 4;
                w = 4;
            }
            
            //为下面for提供起始值
            int startnum;
            if (inputnum > 3) {
                startnum = inputnum - 4;
            }else {
                startnum = 0;
            }
            
            if (inputnum > 35) {
                System.out.println("以超出课程范围");
                System.exit(0);
            }
            
            //提示信息
            System.out.println("以下是您本月的学习计划, √ 代表当周学习任务");
            System.out.println("=======================================");
            System.out.println("已学习了"+ m + "个月,第" + w + "周!");
            
            //利用for循环,找到数组中对应这个月的内容输出
            for (int i = startnum; i < startnum+4; i++) {            
                //根据当前月第几周,在输出此行时,前面添加“√”
                if (i == inputnum-1) {
                    contentList[inputnum-1] = "√" + contentList[inputnum-1];
                }             
                System.out.println(contentList[i]);            
            }

    我用了个笨办法

    忆_卿

    没有笨办法,实用就行,多谢直接。

    2020-09-14 20:27:39

    共 1 条回复 >

  • BerryF
    2020-09-13 14:38:58

    你这样写也不对,如果输入不是最后一月的,循环会直接循环到结尾,可以这样:

    for(int i = (month - 1) * 4 ; i < month * 4 && i < contentList.length ; i++){
    
    }


    忆_卿

    这种也可以,比我后面写的更简便, 谢谢指教。

    2020-09-14 20:26:41

    共 1 条回复 >

  • 忆_卿
    2020-09-07 00:34:17

    http://img1.mukewang.com/5f550f660001c98a10180462.jpg我用老师的源代码,输入了33-35测试了  这是结果。

    qq_慕姐5...

    简单直接 再多一个空值在第35个下标,然后顶上new那里改成36

    2020-09-12 21:55:57

    共 1 条回复 >

Java入门第一季(IDEA工具)升级版

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

1165172 学习 · 17581 问题

查看课程

相似问题