gameghost 发表于 2006-12-9 22:10:22

无~

JAY 发表于 2006-12-10 11:04:19

编译没有问题,有数组下标越界了。

家在北大方 发表于 2006-12-10 11:37:00

数组下标越界??
我把multi的返回值类型改成void去掉return.为什么就不越界呢??
急切想知道!谢谢

与狼共舞 发表于 2006-12-10 12:42:08

返回值为int的multi函数放在main中就是一个数.这个数multi(a,b,c)被孤零零的放在那里,没有对它做运算和其它处理.当然是错误的啦!!!!!!!!!!

leesoft 发表于 2006-12-10 12:48:58

好像有返回值的函数也可以不使用其返回值吧

JAY 发表于 2006-12-10 15:43:46

Java的语法规定比C++要严格,有返回类型的函数必须有返回值的。
检查一下你的代码吧,也许在运行的时候某个下标越界了。

Eastsun 发表于 2006-12-10 15:51:01

这个程序不抛出ArrayIndexOutOfBoundsException才怪呢。

public class Matrix
{
public static void main(String arg[])
{
   int a[][]={{2,2,3},{4,5,6},{7,8,9}};
   int b[][]={{7,8,9},{4,5,6},{1,2,3}};
   int H=a.length,K=b.length;
   int c[][]=new int ;
   multi(a,b,c);
   for(int m=0;m<a.length;m++)
   {
      for(int n=0;n<b.length;n++)
       System.out.print(c+"");
      System.out.println();
    }
}
      public static int multi(int x[][],int y[][],int z[][])
{
   int i=0,k=0,j=0;
   for(i=0;i<x.length;i++)
      for(j=0;j<y.length;j++)
            for(k=0;k<y.length;k++)
      z[ i]+=x[ i]*y;
   //在这里,i=x.length,j=y.length,k=y.length
   return z[ i]+=x[ i]*y;       //越界就发生在这里!!
}
}

家在北大方 发表于 2006-12-10 21:09:52

了解!

guodongsun 发表于 2006-12-9 20:35:17

求助

public class Matrix
{
   public static void main(String arg[])
   {
      int a[][]={{2,2,3},{4,5,6},{7,8,9}};
      int b[][]={{7,8,9},{4,5,6},{1,2,3}};
      int H=a.length,K=b.length;
      int c[][]=new int ;
      multi(a,b,c);
      for(int m=0;m<a.length;m++)
      {
      for(int n=0;n<b.length;n++)
         System.out.print(c+"   ");
      System.out.println();
      }
   }
      public static int multi(int x[][],int y[][],int z[][])
   {
      int i=0,k=0,j=0;
      for(i=0;i<x.length;i++)
      for(j=0;j<y.length;j++)
                   for(k=0;k<y.length;k++)
      z[ i]+=x[ i]*y;   
      returnz[ i]+=x[ i]*y;
   }

问问上面的代码为什么错了:?
我把函数 multi的返回值类型改为void然后去掉return那行就是正确的了!
页: [1]
查看完整版本: 求助