首页上一页 1 下一页尾页 1 条记录 1/1页
怎样为矩阵在指定位置增加一行或者一列?
发表在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();
}
}
}
我知道该在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();
}
}
}