一个java矩阵方面的问题 这个矩阵有三个计算方法 单个运行都对 但是我用测试类一起运行时就错了 高手帮帮

[复制链接]
查看11 | 回复1 | 2011-3-24 11:30:29 | 显示全部楼层 |阅读模式
第一个方法结果对 后边的就不对了 是不是数组引用的问题呀 我没有分了 希望大家帮帮忙 测试了 好久 就是不知道怎么搞的
矩阵类
import java.io.*;

public class JuZhen
{
private int hangNum;
private int lieNum;
private int[][] value=new int[20][20];
private static int[][] FALSE={{0}};

public JuZhen()
{

hangNum=0;

lieNum=0;

for(int i=0;i20;i)

for(int j=0;j20;j)

value[j]=0;
}
public int[][] getJuZhen()
{

return value;
}
public void setJuZhen(int[][] value)//获得矩阵值
{



this.hangNum=value.length;

this.lieNum=value[0].length;

this.value=value;
}
public void displayJuZhen()
//显示矩阵结果
{

System.out.println(\"矩阵如下:\");

for(int i=0;ihangNum;i)

{

for(int j=0;jlieNum;j)

System.out.print(value[j] \"\\t\");

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

}

}
public int[][] plus(int[][] value1,int[][] value2)//矩阵加
{

if(value1.length==value2.length ivalue1.length;i)

for(int j=0;jvalue1[0].length;j)

value[j]=value1[j] value2[j];

return value;

}

else

{

System.out.println(\"这两个数组不能相加\");


return FALSE;

}

}

public int[][] minus(int[][] value1,int[][] value2)//矩阵减

{

if(value1.length==value2.length ivalue1.length;i)

for(int j=0;jvalue1[0].length;j)

value[j]=value1[j] - value2[j];

return value;

}

else

{

System.out.println(\"这两个数组不能相减\");


return FALSE;

}

}

public int[][] multiplication(int[][] value1,int[][] value2)//矩阵乘

{

int tp=0;

if(value1[0].length==value2.length ivalue1.length;i)

for(int j=0;jvalue2[0].length;j)

{

tp=0;

for(int k=0;kvalue1[0].length;k)

tp=value1[k] * value2[k][j] tp;

value[j]=tp;

}

return value;

}

else

{

System.out.println(\"这两个数组不能相乘\");


return FALSE;

}

}
}
那个测试类 就在那个图片里了 字数不够 谢谢了
回复

使用道具 举报

千问 | 2011-3-24 11:30:29 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">调试后发现你程序有问题:value[j]=value1[j] - value2[j];value[j]=value1[j] value2[j];value[j]=tp;这几句你的结果都是存回了value数组,可是实际上,在你的测试程序里,
jz.setJuZhen(value2);
jz.displayJuZhen();
int[][] v1 = jz.plus(value1, value2);
jz.setJuZhen(v1);
你的value2首先赋值给了value数组,即value和value2引用变量指向了内存中同个数组,之后在jz.setJuZhen(v1);这一句,你同时更新了value和value2数组,所以在后面你使用value2数组时,其实它的值都是前一步骤的运行结果。即是,你先矩阵相加,之后的value2就是相加的结果,你再进行相减的时候,实际上就是value1减去之前的和了。
我修改了minus,plus,multiplication方法,还有修改了测试程序。
public int[][] plus(int[][] value1, int[][] value2) // 矩阵加
{
int[][] tempValue = new int[3][3];
if (value1.length == value2.length

ivalue1.length; i){

for (int j = 0; jvalue1[0].length; j){

tempValue[j] = value1[j] value2[j];

}
}

return tempValue;
} else {
System.out.println(\"这两个数组不能相加\");
return FALSE;
}
}

public int[][] minus(int[][] value1, int[][] value2) // 矩阵减
{
int[][] tempValue = new int[3][3];
if (value1.length == value2.length

ivalue1.length; i){

for (int j = 0; jvalue1[0].length; j){

tempValue[j] = value1[j] - value2[j];

}
}

return tempValue;
} else {
System.out.println(\"这两个数组不能相减\");
return FALSE;
}
}

public int[][] multiplication(int[][] value1, int[][] value2) // 矩阵乘
{
int[][] tempValue = new int[3][3];
int tp = 0;
if (value1[0].length == value2.length

ivalue1.length; i){

for (int j = 0; jvalue2[0].length; j){

tp = 0;

for (int k = 0; kvalue1[0].length; k){

tp = value1[k] * value2[k][j] tp;

}

tempValue[j] = tp;

}
}
return tempValue;
} else {
System.out.println(\"这两个数组不能相乘\");
return FALSE;
}
}
测试程序:

import java.util.*;

public class TestJuZhen {
public static void main(String[]args){
Random rand = new Random();
int[][] value1 = new int[3][3];
int[][] value2 = new int[3][3];
for(int i = 0;i3;i){
for(int j = 0;j3;j){

value1[j] = rand.nextInt(3);

value2[j] = rand.nextInt(3);
}
}
JuZhen jz = new JuZhen();
jz.setJuZhen(value1);
jz.displayJuZhen();
jz.setJuZhen(value2);
jz.displayJuZhen();
int[][] v1 = jz.plus(value1, value2);
jz.setJuZhen(v1);
System.out.println(\"矩阵相加:\");
jz.displayJuZhen();
int[][] v2 = jz.minus(value1, value2);
jz.setJuZhen(v2);
System.out.println(\"矩阵相减:\");
jz.displayJuZhen();
int[][] v3 = jz.multiplication(value1, value2);
jz.setJuZhen(v3);
System.out.println(\"矩阵相乘:\");
jz.displayJuZhen();


}

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行