用java怎么实现

作者&投稿:驹樊 (若有异议请与网页底部的电邮联系)
用java怎么实现A*算法~

代码实现(Java)1. 输入(1) 代表地图二值二维数组(0表示可通路,1表示路障)int[][] maps = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } };123456789123456789(2) 按照二维数组的特点,坐标原点在左上角,所以y是高,x是宽,y向下递增,x向右递增,我们将x和y封装成一个类,好传参,重写equals方法比较坐标(x,y)是不是同一个。public class Coord{ public int x; public int y; public Coord(int x, int y) { this.x = x; this.y = y; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj instanceof Coord) { Coord c = (Coord) obj; return x == c.x && y == c.y; } return false; }}12345678910111213141516171819202122231234567891011121314151617181920212223(3) 封装路径结点类,字段包括:坐标、G值、F值、父结点,实现Comparable接口,方便优先队列排序。public class Node implements Comparable{ public Coord coord; // 坐标 public Node parent; // 父结点 public int G; // G:是个准确的值,是起点到当前结点的代价 public int H; // H:是个估值,当前结点到目的结点的估计代价 public Node(int x, int y) { this.coord = new Coord(x, y); } public Node(Coord coord, Node parent, int g, int h) { this.coord = coord; this.parent = parent; G = g; H = h; } @Override public int compareTo(Node o) { if (o == null) return -1; if (G + H > o.G + o.H) return 1; else if (G + H openList = new PriorityQueue(); // 优先队列(升序) List closeList = new ArrayList();1212(3) 定义几个布尔判断方法:最终结点的判断、结点能否加入open表的判断、结点是否在Close表中的判断。 /** * 判断结点是否是最终结点 */ private boolean isEndNode(Coord end,Coord coord) { return coord != null && end.equals(coord); } /** * 判断结点能否放入Open列表 */ private boolean canAddNodeToOpen(MapInfo mapInfo,int x, int y) { // 是否在地图中 if (x = mapInfo.width || y = mapInfo.hight) return false; // 判断是否是不可通过的结点 if (mapInfo.maps[y][x] == BAR) return false; // 判断结点是否存在close表 if (isCoordInClose(x, y)) return false; return true; } /** * 判断坐标是否在close表中 */ private boolean isCoordInClose(Coord coord) { return coord!=null&&isCoordInClose(coord.x, coord.y); } /** * 判断坐标是否在close表中 */ private boolean isCoordInClose(int x, int y) { if (closeList.isEmpty()) return false; for (Node node : closeList) { if (node.coord.x == x && node.coord.y == y) { return true; } } return false; }1234567891011121314151617181920212223242526272829303132333435363738394041424344454612345678910111213141516171819202122232425262728293031323334353637383940414243444546(4) 计算H值,“曼哈顿” 法,坐标分别取差值相加private int calcH(Coord end,Coord coord){ return Math.abs(end.x - coord.x) + Math.abs(end.y - coord.y);}12341234(5) 从Open列表中查找结点private Node findNodeInOpen(Coord coord){ if (coord == null || openList.isEmpty()) return null; for (Node node : openList) { if (node.coord.equals(coord)) { return node; } } return null;}123456789101112123456789101112(6) 添加邻结点到Open表/** * 添加所有邻结点到open表 */private void addNeighborNodeInOpen(MapInfo mapInfo,Node current){ int x = current.coord.x; int y = current.coord.y; // 左 addNeighborNodeInOpen(mapInfo,current, x - 1, y, DIRECT_VALUE); // 上 addNeighborNodeInOpen(mapInfo,current, x, y - 1, DIRECT_VALUE); // 右 addNeighborNodeInOpen(mapInfo,current, x + 1, y, DIRECT_VALUE); // 下 addNeighborNodeInOpen(mapInfo,current, x, y + 1, DIRECT_VALUE); // 左上 addNeighborNodeInOpen(mapInfo,current, x - 1, y - 1, OBLIQUE_VALUE); // 右上 addNeighborNodeInOpen(mapInfo,current, x + 1, y - 1, OBLIQUE_VALUE); // 右下 addNeighborNodeInOpen(mapInfo,current, x + 1, y + 1, OBLIQUE_VALUE); // 左下 addNeighborNodeInOpen(mapInfo,current, x - 1, y + 1, OBLIQUE_VALUE);}/** * 添加一个邻结点到open表 */private void addNeighborNodeInOpen(MapInfo mapInfo,Node current, int x, int y, int value){ if (canAddNodeToOpen(mapInfo,x, y)) { Node end=mapInfo.end; Coord coord = new Coord(x, y); int G = current.G + value; // 计算邻结点的G值 Node child = findNodeInOpen(coord); if (child == null) { int H=calcH(end.coord,coord); // 计算H值 if(isEndNode(end.coord,coord)) { child=end; child.parent=current; child.G=G; child.H=H; } else { child = new Node(coord, current, G, H); } openList.add(child); } else if (child.G > G) { child.G = G; child.parent = current; // 重新调整堆 openList.add(child); } }}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606112345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061(7) 回溯法绘制路径private void drawPath(int[][] maps, Node end){ if(end==null||maps==null) return; System.out.println("总代价:" + end.G); while (end != null) { Coord c = end.coord; maps[c.y][c.x] = PATH; end = end.parent; }}12345678910111234567891011(8) 开始算法,循环移动结点寻找路径,设定循环结束条件,Open表为空或者最终结点在Close表public void start(MapInfo mapInfo){ if(mapInfo==null) return; // clean openList.clear(); closeList.clear(); // 开始搜索 openList.add(mapInfo.start); moveNodes(mapInfo);}/** * 移动当前结点 */private void moveNodes(MapInfo mapInfo){ while (!openList.isEmpty()) { if (isCoordInClose(mapInfo.end.coord)) { drawPath(mapInfo.maps, mapInfo.end); break; } Node current = openList.poll(); closeList.add(current); addNeighborNodeInOpen(mapInfo,current); }}

就是说先有一个接口,然后再写一个类来实现接口中所定义的方法

public class  整型
{
public static void main(String[] args) 
{
System.out.println("
==========数组练习==========
");

//创建数组!
int[] arr=new int[10];

//随机赋值!
for (int i=0;i<arr.length ;i++ )
{
arr[i]=(int)(Math.random()*100);
}

init(arr);//遍历!

init(arr,1);//求和!

int[] brr=init(arr,"1");//排序!

init(arr);//排序后打印!

System.out.println("

最小值="+brr[0]+";最大值="+brr[1]+"

");

}
//遍历输出!
private static void init(int[] arr)
{
System.out.println("
遍历输出:
");
for (int i=0;i<arr.length;i++ )
{
System.out.print((i+1)+"="+arr[i]+" ");
}
}
//求和功能!
private static void init(int[] arr,int j)
{
int a=0;
for (int i=0;i<arr.length;i++ )
{
a+=arr[i];
}
System.out.println("

数组元素和="+a);
}
//排序!
private static int[] init(int[] arr,String s)
{
//记录,最大,与最小!
int[] brr={0,0};
for (int i=0;i<arr.length;i++ )
{
for (int j=i+1;j<arr.length ;j++ )
{
if(arr[i]>arr[j])
{
arr[i]=arr[i]^arr[j];
arr[j]=arr[i]^arr[j];
arr[i]=arr[i]^arr[j];
}
}
}
brr[0]=arr[0];
brr[1]=arr[arr.length-1];
return brr;
}

}



int a[]=new int[10];
for(int i=0;i<10;i++){
a[i]=Random().nextInt(100) + 1;
}


Java 类中类 是怎么实现的?
这样才能访问外部类的变量,private的也行。把内部类声明为static,那么就不会有一个指向外部类的指针。自然也访问不了外部类的变量,除非外部变量是static的。也自然不需要先生成外部类的实例才能生成内部类的实例。这样的内部类叫做Nested Class Thinking in Java里讲的很清楚了。自己去看看吧。

java软件是怎么做的?
java软件就是指用java语言代码编写的软件,编写java软件必须要了解java知识。Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,...

大学生福音Java常见设计模式总结
Java常见设计模式快来看看 1、创建型-工厂方法模式: (1)简单工厂模式: 建立一个工厂类,并定义一个接口对实现了同一接口的产品类进行创建。 (2)工厂方法模式: 工厂方法模式是对简单工厂模式的改进,简单工厂的缺陷在干不符合“开闭原则” (3)静态工厂方法模式: 静态工厂模式是将工厂方法模式里的方法置为静态的,...

如何用java实现“点击一个按钮,出现另一个按钮”的功能?
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;@SuppressWarnings("serial")public class ButtonFrame extends JFrame { public ButtonFrame() { buttonPanel = new JPanel();setSize(500, ...

java中接口实现多继承是怎么实现的?
在java当中,每个类(类java.lang.Object除外)有且仅有一个直接父类(下面有注释),不能直接继承多个父类,但是可以直接继承多个接口,接口之间用逗号隔开(注意继承接口时要实现接口中的方法)注释:类的定义格式如下 【类修饰词列表】 class 类名 【extends 父类名】 【implements 接口名称列表】{...

java中怎么实现让一串字出现停留一会又消失的
用线程可以实现 新建一个线程,去呈现文字,规定的时间结束后 import javax.swing.JFrame;import javax.swing.JLabel;public class NewFrame extends JFrame { private JLabel jl; public NewFrame() { jl = new JLabel(); add(jl); setSize(500, 500); setLocation(300, 200...

java注解是怎么实现的
注解的使用一般是与java的反射一起使用,下面是一个例子 注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类...

如何实现java web开发?
步骤:(1)JDK中集成了许多系统自带的类,通常的调用方法import。(2)list是集合的关键词,使用集合必要的类。(3)list属于集合类,如果使用集合,那么开始添加数据add()。(4)可以添加那么也可以清除list中的数据,一般会调用list中的子类remove。(5)不知不觉加入了多个数值,那么这个集合又会有...

Java中如何实现与后台数据库的连接?
用JAVA连接数据库主要有两种方式,一是用JDBC-ODBC桥来连接,二是用相关厂商提供的相应驱动程序来连接,首先谈谈第一种连接。 \\x0d\\x0a\\x0d\\x0aJDBC-ODBC桥接器是用JdbcOdbc.Class和一个用于访问ODBC驱动程序的本地库实现的。对于WINDOWS平台,该本地库是一个动态连接库DLL(JDBCODBC.DLL)。 \\x...

java 怎么实现网页截图
事实上,如果您想以Java实现网页截图,也就是“输入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。那么,您至少有3种方式可以选择。1、最直接的方式——使用Robot方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。优势:简单易用,不需要...

裕民县19886949950: 如何用java实现一个新增的功能 -
郁严参伯: 以用户管理为例,新增用户功能就是点击新增按钮,弹出新增用户窗口,然后填写相关信息,点击保存,就把这个表单提交到后台,后台再调用jdbc,将表单信息新增到数据库即可.

裕民县19886949950: 如何通过java实现功能 -
郁严参伯: 设计数据访问的数据库 设计数据调用的实体 设计DAO层 ,DAO里设计功能接口 设计DAO接口实现类 ,来实现这个接口的所有功能 设计service层 设计面向客户需要的功能 并设置这些功能的所有接口 设计service层接口实现类 实现service的功能接口 设计servlet层 数据的控制层 设计 用户界面

裕民县19886949950: 用java语言编程实现以下功能 -
郁严参伯: 用do while或者while控制循环,直到用户输入空字符串就跳出循环,用文件输出流写入用户输入的字符串文本文件中.

裕民县19886949950: 如何用Java实现Web服务器 -
郁严参伯: 如何用Java实现Web服务器 一、HTTP协议的作用原理 WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页.WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)...

裕民县19886949950: 如何用Java实现一个简单的单页面Web Crawler -
郁严参伯: 本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件:Eclipse Java EE IDE for Web DevelopersJava SE 6Windows XP2.基

裕民县19886949950: 如何用JAVA实现文件的覆盖 -
郁严参伯: 在实际写入文件时,有两种写入文件的方式:覆盖和追加.其中“覆盖”是指清除原文件的内容,写入新的内容,默认采用该种形式写文件,“追加”是指在已有文件的末尾写入内容,保留原来的文件...

裕民县19886949950: 怎样用java语言实现如下功能?? -
郁严参伯: 提供个参考 public class abstract Man { private String name; private String sex; private Date birthday; } class Teacher extends Man { private String school; private String no; } class abstract Student extends Man { private String school; private String type; private int grade; }

裕民县19886949950: Java怎么实现如下功能?
郁严参伯: import java.io.BufferedReader ;import java.io.InputStreamReader ;import java.io.IOException ;public class Demo{ public static void main(String args[]){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ; String str = null ;...

裕民县19886949950: 如何实现用java实现下图所示的图形,急用~~~~ -
郁严参伯: import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Polygon;import javax.swing.JFrame;import javax.swing.JPanel; public class DrawDemo extends JPanel { public void paintComponent(Graphics g) ...

裕民县19886949950: 在Java中可以使用哪些方法来实现Java的多进程运行模式?
郁严参伯: 在Java中我们可以使用两种方法来实现这种要求.最简单的方法就是通过Runtime中的exec方法执行java classname.如果执行成功,这个方法返回一个Process对象,如果...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网