重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
最有效,切不复杂的方法使用Breadth First Search (BFS). 基本代码如下(伪代码)。因为BFS不用递归,所以可能会有点难理解。
创新互联是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,小程序制作,十载建站对工商代办等多个领域,拥有多年的网站运维经验。
public Stack findPath(Vertex 起始景点, Vertex 目标景点){
Queue Vertex q = new QueueVertex();
s.enqueue(起始景点);
Vertex 当前位置;
while(!s.isEmpty()){
当前位置 = s.dequeue();
if (当前位置 == 目标景点) break;
for (每一个相邻于 当前位置 的景点 Vertex v){
if (!v.visited){
v.parent = 当前位置;
// 不是规定,不过可以节省一点时间
if (v == 目标景点){
current = v;
break;
}
s.enqueue(Vertex v);
v.visited = true;
}
}
}
Stack Vertex solution = new Stack Vertex();
Vertex parent = current;
while (parent != 起始景点){
solution.push(parent);
parent = current.parent;
}
for (graph中的每一个vertex) vertex.visited = false;
return solution(); // 其实这里建议用一个 Path 的inner class 来装所获得的路线
}
然后再 main 求每两个景点之间的距离即可
public static void main(String[] argv){
PathFinder pf = new PathFinder();
Stack[][] 路径 = new Stack[10][10];
for(int i=0; ipf.vertices.length; i++){
for(int j=i+1; jpf.vertices.length; j++){
Stack s = pf.findPath(pf.vertices[i], pf.vertices[j]);
路径[i][j] = s; 路径[j][i] = s; // 假设你的graph是一个undirected graph
}
}
// 这么一来就大功告成了!对于每两个景点n 与 m之间的最短路径就是在 stack[n][m] 中
}
还有一种方法就是用Depth First Search递归式的寻找路径,不过这样比较慢,而且我的代码可能会造成stack overflow
public Stack dfs(Vertex 当前景点,Vertex 目标景点){
if(当前景点 == 目标景点) return;
Stack solution = new Stack();
Stack temp;
for (相邻于 点钱景点 的每一个 Vertex v){
if (!v.visited){
v.visited = true;
temp = dfs(v, 目标景点);
// 抱歉,不记得是stack.size()还是stack.length()
if (solution.size() == 0) solution = temp;
else if(temp.size() solution.size()) solution = temp;
v.visited = false; 复原
}
}
return solution;
}
然后再在上述的Main中叫dfs...
参考:
这个规则就是设计一个方法,该方法最后值为一个票价,参数应该是身高,所以有如下代码
public class PriceTest {
public static void main(String[] args) {
int childPrice = getPrice(1.2);
int adultPrice = getPrice(1.5);
System.out.println("1.2米身高的票价为:"+childPrice);
System.out.println("1.5米身高的成人票价为:"+adultPrice);
}
private static int getPrice(double height) {
return height 1.2?10:5;
}
}
最后结果如下:
public class Test {
public static void main(String[] args) {
int length = 5;
int ai = 1;
String data = "data";
String[] array = insertArrar(data, ai, length);
data = delArray(array, ai, length);
System.out.println(data);
}
public static String[] insertArrar(String data,int ai,int length){
String[] array = new String[length];
array[ai] = data;
return array;
}
public static String delArray(String[] array,int ai,int length){
String data = "";
data=array[ai];
array[ai]=null;
for(int i = 0; iarray.length;i++){
System.out.println(array[i]);
}
return data;
}
}
这明显是sql的问题,要将两部分数据查询出来插入一张零食表,这两张表相同还好,直接在后台拼接创建临时表的sql语句就得了;
if...
SELECT * INTO #table FROM
(
................第一张表...........
}
insert into #table
from
(
................第二张表...........
);
//就这样;
按你现在说的这个内容,我觉得三个类就能表现出来,我写了一下,你看看能不能满足你的要求:
/**
* 运动员信息
* @author songfeng163
*/
public class PlayerState {
private String lx; //运动类型
private String xing; // 姓
private String ming; // 名
public String getLx() {
return lx;
}
public void setLx(String lx) {
this.lx = lx;
}
public String getXing() {
return xing;
}
public void setXing(String xing) {
this.xing = xing;
}
public String getMing() {
return ming;
}
public void setMing(String ming) {
this.ming = ming;
}
//返回姓名信息
@Override
public String toString() {
return xing+ming;
}
}
/**
* 运动员得分信息
* @author songfeng163
*/
public class SoccerPlayerStats {
private PlayerState player; //运动员信息
private double spointsScored; //点球得分
private double assists; //助攻得分
private double penaltyKickRate; //罚球得分概率
public PlayerState getPlayer() {
return player;
}
public void setPlayer(PlayerState player) {
this.player = player;
}
public double getSpointsScored() {
return spointsScored;
}
public void setSpointsScored(double spointsScored) {
this.spointsScored = spointsScored;
}
public double getAssists() {
return assists;
}
public void setAssists(double assists) {
this.assists = assists;
}
public double getPenaltyKickRate() {
return penaltyKickRate;
}
public void setPenaltyKickRate(double penaltyKickRate) {
this.penaltyKickRate = penaltyKickRate;
}
//返回分数信息
@Override
public String toString() {
return "** PLAYER ADDED **"+ player.toString()+"; Points:"+ spointsScored + "; Assists: "+ assists +"; Penalty Kick %:" + penaltyKickRate;
}
}
这里是主类:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
/**
* 主类
* @author songfeng163
*/
public class MyMain {
//添加方法
public ListSoccerPlayerStats add(ListSoccerPlayerStats list){
Scanner in=new Scanner(System.in);
PlayerState player=new PlayerState();
SoccerPlayerStats score=new SoccerPlayerStats();
System.out.println("请输入运动类型:足球,高尔夫,田径:");
player.setLx(in.next());
System.out.println("请输入姓:");
player.setXing(in.next());
System.out.println("请输入名:");
player.setMing(in.next());
System.out.println("请输入该运动员的点球得分:");
score.setSpointsScored(in.nextDouble());
System.out.println("请输入该运动员的助攻得分:");
score.setAssists(in.nextDouble());
System.out.println("请输入该运动员的罚球得分概率:");
score.setPenaltyKickRate(in.nextDouble());
score.setPlayer(player);
System.out.println(score); //显示新添加的人员
list.add(score);
return list;
}
//删除方法
public ListSoccerPlayerStats del(ListSoccerPlayerStats list){
Scanner in=new Scanner(System.in);
PlayerState player=new PlayerState();
System.out.println("请输入要删除运动员的姓:");
player.setXing(in.next());
System.out.println("请输入要删除运动员的名:");
player.setMing(in.next());
for(SoccerPlayerStats score:list){
if(score.getPlayer().getXing().equals(player.getXing())
score.getPlayer().getMing().equals(player.getMing())){
list.remove(score);
break;
}
}
return list;
}
//显示方法
public void show(ListSoccerPlayerStats list){
System.out.println("当前共有:"+list.size()+"条记录,内容如下:");
for(SoccerPlayerStats score:list){
System.out.println(score);
}
}
//保存方法
public ListSoccerPlayerStats save(ListSoccerPlayerStats list){
System.out.println("请输入要保存的文件名:");
Scanner in=new Scanner(System.in);
String fileName=in.next();
try{
BufferedWriter bw = new BufferedWriter(new FileWriter("C:/"+fileName));
for(SoccerPlayerStats score:list){
bw.write(score.toString());
bw.newLine();
}
bw.flush();
bw.close();
}catch(Exception ex){
ex.printStackTrace();
}
System.out.println("** 1 RECORD SAVED TO "+fileName+" **");
return list;
}
public static void main(String[] args) {
MyMain myMain=new MyMain();
Scanner in=new Scanner(System.in);
//如果像你说的是数组的话,数据没有办法动态变化,所以我用了list
ListSoccerPlayerStats list=new ArrayListSoccerPlayerStats();
String cz="QUIT"; //默认的操作为退出
System.out.println("下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?");
String czin=in.next(); //输入数据
cz=czin.toUpperCase(); //转换成大写
while(!cz.equals("QUIT")){ //不是退出
if(cz.equals("ADD")){ //添加数据
list = myMain.add(list);
}else if(cz.equals("REMOVE")){ //删除数据
list = myMain.del(list);
}else if(cz.equals("SHOW")){ //显示数据
myMain.show(list);
}else if(cz.equals("SAVE")){ //保存数据
myMain.save(list);
}
System.out.println("下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?");
czin=in.next(); //输入数据
cz=czin.toUpperCase(); //转换成大写
}
System.out.println("** GOODBYE! **");
}
}
运行结果如下:
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
add
请输入运动类型:足球,高尔夫,田径:
足球
请输入姓:
王
请输入名:
明
请输入该运动员的点球得分:
4
请输入该运动员的助攻得分:
2
请输入该运动员的罚球得分概率:
0.25
** PLAYER ADDED **王明; Points:4.0; Assists: 2.0; Penalty Kick %:0.25
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
add
请输入运动类型:足球,高尔夫,田径:
高尔夫
请输入姓:
李
请输入名:
三
请输入该运动员的点球得分:
2
请输入该运动员的助攻得分:
2
请输入该运动员的罚球得分概率:
0.3
** PLAYER ADDED **李三; Points:2.0; Assists: 2.0; Penalty Kick %:0.3
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
show
当前共有:2条记录,内容如下:
** PLAYER ADDED **王明; Points:4.0; Assists: 2.0; Penalty Kick %:0.25
** PLAYER ADDED **李三; Points:2.0; Assists: 2.0; Penalty Kick %:0.3
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
save
请输入要保存的文件名:
Playerdata.txt
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
remove
请输入要删除运动员的姓:
李
请输入要删除运动员的名:
三
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
show
当前共有:1条记录,内容如下:
** PLAYER ADDED **王明; Points:4.0; Assists: 2.0; Penalty Kick %:0.25
下面如何操作(ADD, REMOVE, SHOW, SAVE, QUIT)?
quit
** GOODBYE! **
class.forname("oracle.jdbc.driver.OracleDriver");//加载数据库驱动
String url="jdbc:oracle:thin:@localhost:1521:db_name";
String sql="CREATE TABLE table(filed1 varchar2(2),filed2 varchar2(2))";
Connection conn=DriverManager.getConnection(url,"scott","tiger");//建立数据库连接
if(!conn.isClose()){
Statement stmt = conn.createStatement();
stmt.executeUPDATE(sql); //建立一个表
}