问题描述
如题觉得逻辑有点奇怪但不知道是哪里出错求大神指点!!!importjava.util.Scanner;classTrituple{publicintrow;publicintcol;publicintvalue;publicTrituple(intr,intc,intv){row=r;col=c;value=v;}}publicclassJuzhen{/***@paramargs*/introw;intcol;intsize;publicTrituplearr[];publicJuzhen(intMRow,intMCol,intMSize){row=MRow;col=MCol;size=MSize;arr=newTrituple[size];intr=0;intc=0;intv=0;for(inti=0;i<size;i++){System.out.println("非零值的行号");Scannerrr=newScanner(System.in);r=rr.nextInt();System.out.println("非零值的列号");Scannercc=newScanner(System.in);c=cc.nextInt();System.out.println("非零值为:");Scannervv=newScanner(System.in);v=vv.nextInt();Trituplet=newTrituple(r,c,v);arr[i]=t;}}publicvoidshow(){inti,j,k;System.out.println("该稀疏矩阵为:");for(i=0;i<row;i++){for(j=0;j<col;j++){for(k=0;k<size;k++)if(i==arr[k].row&&j==arr[k].col){System.out.print(arr[k].value+"");break;}if(k==size)System.out.print(0+"");}System.out.println();}}publicstaticvoidplus(Juzhens1,Juzhens2,Juzhens3){s3=newJuzhen(s1.row,s1.col,0);s3.size=0;inta,b,e,k;a=b=e=0;for(k=1;k<=s1.row;k++){while(s1.arr[a].row==k&&s2.arr[b].row==k){//两结点属于同一行if(s1.arr[a].col<s2.arr[b].col){//A中下标a的结点小于B中下标为b的结点的列数s3.arr[e].value=s1.arr[a].value;s3.arr[e].row=s1.arr[a].row;s3.arr[e].col=s1.arr[a].col;++e;a++;}elseif(s1.arr[a].col==s2.arr[b].col){//两结点属于同一列inttemp=s1.arr[a].value+s2.arr[b].value;//两结点数值相加不等于0s3.arr[e].value=s1.arr[a].value+s2.arr[b].value;s3.arr[e].row=s1.arr[a].row;s3.arr[e].col=s1.arr[a].col;e++;a++;b++;}else{//A中下标a的结点大于B中下标为b的结点的列数s3.arr[e].value=s2.arr[b].value;s3.arr[e].row=s2.arr[b].row;s3.arr[e].col=s2.arr[b].col;e++;b++;}}while(s1.arr[a].row==k){//只有A中剩下行数为k的未处理结点s3.arr[e].value=s1.arr[a].value;s3.arr[e].row=s1.arr[a].row;s3.arr[e].col=s1.arr[a].col;e++;a++;}while(s2.arr[b].row==k){//只有B中剩下行数为k的未处理结点s3.arr[e].value=s2.arr[b].value;s3.arr[e].row=s2.arr[b].row;s3.arr[e].col=s2.arr[b].col;e++;b++;}}s3.size=e;s3.show();}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println("请输入三元组的行数:");Scannerrr=newScanner(System.in);intr=rr.nextInt();System.out.println("请输入三元组的列数:");Scannercc=newScanner(System.in);intc=cc.nextInt();System.out.println("请输入非零值的个数:");Scannervv=newScanner(System.in);intv=vv.nextInt();Juzhens1=newJuzhen(r,c,v);s1.show();///////////////////////////////////////////////System.out.println("请输入三元组的行数:");Scannerrr2=newScanner(System.in);intr2=rr2.nextInt();System.out.println("请输入三元组的列数:");Scannercc2=newScanner(System.in);intc2=cc2.nextInt();System.out.println("请输入非零值的个数:");Scannervv2=newScanner(System.in);intv2=vv2.nextInt();Juzhens2=newJuzhen(r2,c2,v2);s2.show();Juzhens3=newJuzhen(r2,c2,0);plus(s1,s2,s3);}}
解决方案
本帖最后由 u011055823 于 2013-12-10 13:10:46 编辑