已有101人关注
怎样为矩阵在指定位置增加一行或者一列?
发表在Java图书答疑 2014-11-03
是否精华
版块置顶:
原题是:设计Matrix类的添加一行或一列的成员函数,要求能在矩阵的指定下标index处添加一行或一列。
我知道该在Myvector类中public void add(int index,object element)那里改(绿色部分),但不知道怎么才能把加的这个元素弄成矩阵的一行或列.
我这里有Myvetcor类如下:public class Myvector {
private Object[] elementData;
private int elementCount;

private void ensureCapacity(int minCapacity){
int oldCapacity=elementData.length;
if(minCapacity>oldCapacity){
Object oldData[]=elementData;
int newCapacity=oldCapacity*2;
if(newCapacity<minCapacity){
newCapacity=minCapacity;
}
elementData=new Object[newCapacity];
System.arraycopy(oldData,0,elementData,0,elementCount);
}
}
public Myvector(){
this(10);
}
public Myvector(int initialCapacity){
elementData=new Object[initialCapacity];
elementCount=0;
}

[font color=#00FF00]public void add(int index,Object element){
if(index>=elementCount+1){
throw new ArrayIndexOutOfBoundsException(index+">"+elementCount);
}
ensureCapacity(elementCount+1);
System.arraycopy(elementData,index,elementData,index+1,elementCount-index);
elementData[index]=element;
elementCount++;
}[/font]

public void add(Object element){
add(elementCount,element);
}

public void set(int index,Object element){
if(index>=elementCount){
throw new ArrayIndexOutOfBoundsException(index+">="+elementCount);
}
elementData[index]=element;
}

public Object get (int index){
if (index>=elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData[index];
}

public int size(){
return elementCount;
}

public int indexOf(Object element){
if(element==null){
for(int i=0;i<elementCount;i++)
if(elementData[i]==null) return  i;
}
else{
for (int i=0;i<elementCount;i++ )
if(element.equals(elementData[i]))
return i;

}
return-1;
}

public void remove(Object element){
int i=indexOf(element);
if(i>=0){
remove(i);
}
}

public boolean contain(Object element){
return indexOf(element)>=0;
}

public void remove(int index){
if (index>=elementCount){
throw new ArrayIndexOutOfBoundsException(index+">="+elementCount);
}
else if (index<0){
throw new ArrayIndexOutOfBoundsException(index);
}
int j=elementCount-index-1;
if(j>0){
System.arraycopy(elementData, index+1,elementData,index,j);
}
elementCount--;
elementData[elementCount]=null;
}
}
和矩阵类如下:[font color=#FF0000]public class Matrix {
private Myvector values;
private int h;
private int w;

public Matrix(int h,int w){
if(!(h>0&&w>0))
throw new ArrayIndexOutOfBoundsException("h or w<"+1);
values=new Myvector(h);
for(int i=0;i<h;i++){
Myvector row=new Myvector(w);
values.add(row);
for(int j=0;j<w;j++){
row.add(null);
}
}
this.h=h;
this.w=w;
}

public void set(int row,int col,Object value){
if(!(row>=0 && w>=0 && row<h && col<w))
throw new ArrayIndexOutOfBoundsException("h or w<"+"-1");
Myvector selrow=(Myvector)values.get(row);
selrow.set(col,value);
}

public Object get(int row,int col){
if(!(row>=0&&w>=0&&row<h&&col<w))
throw new ArrayIndexOutOfBoundsException("h or w<"+"-1");
Myvector selrow=(Myvector)values.get(row);
return selrow.get(col);
}

public int width(){
return w;
}
public int height(){
return h;
}

public Matrix add(Matrix b){
if(height()!=b.height()||width()!=b.width()){
throw new ArrayIndexOutOfBoundsException("Matrix error");
}

Matrix result =new Matrix(height(),width());

for(int i=0;i<height();i++){
for(int j=0;j<width();j++){
Integer i1=(Integer)get(i,j);
Integer i2=(Integer)(b.get(i,j));
result.set(i,j,new Integer(i1.intValue()+i2.intValue()));
}
}

return result;
}

public void print(){
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
System.out.print(get(i,j)+" ");
}
System.out.println();
}
}
}
分享到:
精彩评论 1
无语_mrkj
学分:3155 LV11
2014-11-03
沙发
请问您这个问题是我公司出版的哪本图书中哪个章节中出现的?
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照