黑马程序员技术交流社区

标题: 程序中的一点小问题 [打印本页]

作者: jialihong    时间: 2013-7-22 16:28
标题: 程序中的一点小问题
package com.itheima;
/* 用控制台程序输出九九乘法表;输出结果按下图所示:
      1*1=1
      1*2=2   2*2=4
      1*3=3   2*3=6   3*3=9
       .........*/
public class Test6 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
          int twoArray[][] = new int[10][10];
                   int i,j;
           for(i=1;i<=9;i++){
                  for(j=1;j<=i;j++){
                           twoArray[j][i] =j*i;
                           System.out.print(j+"*"+i+"="+twoArray[j][i]+" ");
                  }
                  System.out.println();
                 
           }
        }
}
运行结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81


当把数组定义为: int twoArray[][] = new int[9][9]就足够了;但运行结果就没有了最后一行的结果,搞不明白,请各位高手指点。



作者: 付龙    时间: 2013-7-22 16:41
假如你定
int twoArray[][] = new int[9][9];
那么就会数字角标越界异常
你的数值 长度为9 时  你访问 数组的9 下标 ,就会显示 越界。
当前访问的数组下标为9,但是所访问的数组长度不足9;

作者: 王磊    时间: 2013-7-22 18:28
因为楼主的for循环初始量是1,而且使用的数组角标也是1开始,这样就将所有的0角标为空了出来。
如果定义的数组是new int[9][9],那么数组角标为0~8,这样没有9角标位的元素,就不会找到所有使用9角标位的元素。
作者: tanzhiqiu    时间: 2013-7-23 06:13
int twoArray[][] = new int[9][9];定义了一个二维数组,有九个一位数组,每一个数组长度为9。那么数组角标为0~8。取不到9.
其实做99乘法表,两个for,在输出不就好l。不用定义二维数组
作者: 續寫↖完羙↘    时间: 2013-7-23 13:22
int i,j;
                for(j=1;j<=9;j++){//外循环
                        for(i=1;i<=j;i++)//内循环
                                System.out.print(i+"*"+j+"="+i*j+"\t");  
                        System.out.println();
作者: Out_Man    时间: 2013-7-23 18:07
for循环里面变量的初始值是1 和 数组角标是0 相当于twoArray[0][0],twoArray[0][1],......都是空格...。
这增加左右的间距不知多大用
作者: litaojisuanji    时间: 2013-7-23 18:18
简单的说就是for循环里里面的循环变量和数组角标不太搭配,因为for循环里i的初始值为1,而数组里的角标是从0开始的,如果for循环是这样定义的,for(i=1;i<=9;i++)那么打印的时候要减1,System.out.print(j+"*"+i+"="+twoArray[j-1][i-1]+" ")或者for循环从i,j的变量范围为从0到8。
作者: jialihong    时间: 2013-7-23 18:22
好的,各位,明白了,谢谢
作者: fufeng    时间: 2014-4-10 19:12
因为int twoArray[9][9]  ,中的角标只有0-8,而且你的初始角标为1一直到9,很明显,数组中没有角标为9的。所以就显示不出来9这一行了.而且在数组中,而且角标为零的元素位置是没有操作的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2