易码技术论坛

 找回密码
 加入易码
搜索
查看: 268465|回复: 8

求助

[复制链接]
发表于 2006-12-9 22:10:22 | 显示全部楼层
无~
发表于 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)被孤零零的放在那里,没有对它做运算和其它处理.当然是错误的啦!!!!!!!!!!
发表于 2006-12-10 12:48:58 | 显示全部楼层
好像有返回值的函数也可以不使用其返回值吧
发表于 2006-12-10 15:43:46 | 显示全部楼层
Java的语法规定比C++要严格,有返回类型的函数必须有返回值的。
检查一下你的代码吧,也许在运行的时候某个下标越界了。
发表于 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[0].length,K=b.length;
   int c[][]=new int [H][K];
   multi(a,b,c);
   for(int m=0;m<a.length;m++)
   {
      for(int n=0;n<b[0].length;n++)
       System.out.print(c[m][n]+"  ");
      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[0].length;j++)
            for(k=0;k<y.length;k++)
      z[ i][j]+=x[ i][k]*y[k][j];  
   //在这里,i=x.length,j=y[0].length,k=y.length
   return z[ i][j]+=x[ i][k]*y[k][j];       //越界就发生在这里!!
  }
}
发表于 2006-12-10 21:09:52 | 显示全部楼层
了解!
 楼主| 发表于 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[0].length,K=b.length;
      int c[][]=new int [H][K];
      multi(a,b,c);
      for(int m=0;m<a.length;m++)
      {
        for(int n=0;n<b[0].length;n++)
           System.out.print(c[m][n]+"   ");
        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[0].length;j++)
                   for(k=0;k<y.length;k++)
        z[ i][j]+=x[ i][k]*y[k][j];   
      return  z[ i][j]+=x[ i][k]*y[k][j];
   }

问问上面的代码为什么错了:?
我把函数 multi的返回值类型改为void然后去掉return那行就是正确的了!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 22:55 , Processed in 0.010258 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表