Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391920
  • 博文数量: 93
  • 博客积分: 3006
  • 博客等级: 少校
  • 技术积分: 998
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-02 17:23
文章分类

全部博文(93)

文章存档

2011年(12)

2010年(38)

2009年(20)

2008年(23)

分类:

2008-12-02 18:08:38

    昨晚一个晚上,终于把人工智能的大作业--A*算法实现八数码问题---解决了。终于可以发泄一下了,一个问题我搞了几个星期才明白。今天把我的经验在这整理一下,也许有你会的,也许也有你要学的。

1.数组间的拷贝问题

       把一个数组的copy到另一个数组,现在有一个问题就是修改其中一个数组,另一个数组会收到影响吗?

答案是要根据你copy的方式来定!

第一种:两个变量引用同一个数组

int[][] a=new int[3][3];

int[][] b=new int[3][3];

//a初始化

b=a;

//修改ab也相应的改变

②二维数组还有一个copy方式,不过也是引用同一个数组
System.arraycopy( src,int srcPos,  dest, int destPos, int length)
src - 源数组。srcPos - 源数组中的起始位置。dest - 目标数组。destPos - 目标数据中的起始位置。length - 要复制的数组元素的数量。
第二种:两个变量引用不同的数组
  一维数组System.arraycopy();
  二维数组
for(int i=0;i<3;i++){
     for(int j=0;j<3;j++){
             b[i][j]=a[i][j];
}
}

2.类的引用问题

 

先看两个例子

Node

int F

setF();getF();

 

  Node temp=new Node();

ArrayList array=new ArrayList();

for(int i=0;i<10;i++){

        temp.setF(i);

        array.add(temp);

}

   ArrayList array=new ArrayList();

for(int i=0;i<10;i++){

Node temp=new Node();

        temp.setF(i);

        array.add(temp);

}

现在要输出array.get(i).getF()这两个输出的结果一样吗?前一个输出十个9,后一个输出0 1 2 …9

 

3.父指针的问题

要为一个节点 定义个一个父指针,怎么做。

定义一个父节点Node ptr; 在构造函数里ptr=null; 在设置ptr的set()get()函数。

 

4.ArrayList的数组排序问题(有一个节点Node类,类里有一个属性int f,现在要对ArrayList的Node.getF()进行排序)

定义一个Mycomparator 类实现Comparator接口

import java.util.*;
public class Mycomparator implements Comparator{

    public int compare(Object o1,Object o2) {
        Node n1=(Node)o1;
        Node n2=(Node)o2;
       if(n1.getF()>=n2.getF())
           return 1;
       else
          return 0;
       }

}

然后

Collections.sort(open,new Mycomparator()); //对ArrayList类的open按照f的值进行排序

阅读(905) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~