看完你的,自己寫了一個(gè)。很簡陋。你的改動比較大。一時(shí)半會改不了。
成都創(chuàng)新互聯(lián)公司于2013年成立,先為龍亭等服務(wù)建站,龍亭等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為龍亭企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
你的寫好了。改動有點(diǎn)大。鼠標(biāo)事件mousePressed()中實(shí)現(xiàn)移動。由于時(shí)間沒做優(yōu)化,主要處理方法是判斷當(dāng)前l(fā)istenerPanel的上下左右是否存在上面是0的listenerPanel,存在則交換上面數(shù)字及背景顏色。自己可以優(yōu)化下里面代碼,
思路:
PuzzleTile jb = (PuzzleTile) e.getSource();
for(int i=0;ilistenerPanel.length;i++){
if(jb.equals(listenerPanel[i])){
//判斷當(dāng)前l(fā)istenerPanel[i]上下左右是否存有l(wèi)istenerPanel的上面數(shù)字是0的,如果存在
則把當(dāng)前的listenerPanel[i]的背景顏色及數(shù)字與上面是0 的交換。判斷周圍是否存在有點(diǎn)及是否交換有點(diǎn)復(fù)雜。
}
}
代碼修改如下:少量注釋
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.*;
public class PuzzleTile extends JPanel{
private String tileNumber;
public PuzzleTile(int number) {
super();
if (number == 0) {
this.setBackground(Color.white);
}
else {
this.setBackground(Color.darkGray);
}
this.tileNumber = "" + number;
}
public void setTitleNumber(int tileNumber){//設(shè)置上面的數(shù)字
this.tileNumber=tileNumber+"";
}
public int getTitleNumber(){//獲得上面的數(shù)字
return Integer.parseInt(tileNumber);
}
public void paintComponent(Graphics graphics) {
Font a=new Font("Arial",Font.BOLD,30);
graphics.setFont(a);
graphics.setColor(Color.white);
super.paintComponent(graphics);
FontMetrics b=graphics.getFontMetrics(a);
int c=b.stringWidth(tileNumber);
int d=b.getAscent();
int e=getWidth()/2-c/2;
int f=getHeight()/2+d/2;
graphics.drawString(tileNumber,e,f);
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Random;
public class SlidingPuzzle extends JFrame implements MouseListener
{
public static void main(String[] args){
SlidingPuzzle frame=new SlidingPuzzle();
frame.TestPanel();
frame.setTitle("Numeric Sliding Puzzle");
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
PuzzleTile[] listenerPanel;
public void TestPanel(){
Container container=getContentPane();
container.setLayout(new GridLayout(3,3,5,5));
listenerPanel=new PuzzleTile[9];
ArrayListInteger myList=new ArrayListInteger();
int m;
for(int i=0;i9;i++){
m=new Random().nextInt(9);
if(!myList.contains(m))
myList.add(m);
else
i--;
}
for(int i=0;ilistenerPanel.length;i++){
listenerPanel[i]=new PuzzleTile(myList.get(i));
container.add(listenerPanel[i]);
listenerPanel[i].addMouseListener(this);
}
}
public void mousePressed(MouseEvent e){
PuzzleTile jb = (PuzzleTile) e.getSource();
int m=jb.getTitleNumber();
//依次判斷每一個(gè)listenerPanel上下左右是否存在上面數(shù)字為0的listenerPanel
if(jb.equals(listenerPanel[0])){
if(listenerPanel[1].getTitleNumber()==0){
listenerPanel[0].setBackground(Color.white);
listenerPanel[0].setTitleNumber(0);
listenerPanel[1].setTitleNumber(m);
listenerPanel[1].setBackground(Color.darkGray);
}
if(listenerPanel[3].getTitleNumber()==0){
listenerPanel[0].setBackground(Color.white);
listenerPanel[0].setTitleNumber(0);
listenerPanel[3].setTitleNumber(m);
listenerPanel[3].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[1])){
if(listenerPanel[0].getTitleNumber()==0){
listenerPanel[1].setBackground(Color.white);
listenerPanel[1].setTitleNumber(0);
listenerPanel[0].setTitleNumber(m);
listenerPanel[0].setBackground(Color.darkGray);
}
if(listenerPanel[2].getTitleNumber()==0){
listenerPanel[1].setBackground(Color.white);
listenerPanel[1].setTitleNumber(0);
listenerPanel[2].setTitleNumber(m);
listenerPanel[2].setBackground(Color.darkGray);
}
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[1].setBackground(Color.white);
listenerPanel[1].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[2])){
if(listenerPanel[1].getTitleNumber()==0){
listenerPanel[2].setBackground(Color.white);
listenerPanel[2].setTitleNumber(0);
listenerPanel[1].setTitleNumber(m);
listenerPanel[1].setBackground(Color.darkGray);
}
if(listenerPanel[5].getTitleNumber()==0){
listenerPanel[2].setBackground(Color.white);
listenerPanel[2].setTitleNumber(0);
listenerPanel[5].setTitleNumber(m);
listenerPanel[5].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[3])){
if(listenerPanel[0].getTitleNumber()==0){
listenerPanel[3].setBackground(Color.white);
listenerPanel[3].setTitleNumber(0);
listenerPanel[0].setTitleNumber(m);
listenerPanel[0].setBackground(Color.darkGray);
}
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[3].setBackground(Color.white);
listenerPanel[3].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
if(listenerPanel[6].getTitleNumber()==0){
listenerPanel[3].setBackground(Color.white);
listenerPanel[3].setTitleNumber(0);
listenerPanel[6].setTitleNumber(m);
listenerPanel[6].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[4])){
if(listenerPanel[1].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[1].setTitleNumber(m);
listenerPanel[1].setBackground(Color.darkGray);
}
if(listenerPanel[7].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[7].setTitleNumber(m);
listenerPanel[7].setBackground(Color.darkGray);
}
if(listenerPanel[3].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[3].setTitleNumber(m);
listenerPanel[3].setBackground(Color.darkGray);
}
if(listenerPanel[5].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[5].setTitleNumber(m);
listenerPanel[5].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[5])){
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[5].setBackground(Color.white);
listenerPanel[5].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
if(listenerPanel[2].getTitleNumber()==0){
listenerPanel[5].setBackground(Color.white);
listenerPanel[5].setTitleNumber(0);
listenerPanel[2].setTitleNumber(m);
listenerPanel[2].setBackground(Color.darkGray);
}
if(listenerPanel[8].getTitleNumber()==0){
listenerPanel[5].setBackground(Color.white);
listenerPanel[5].setTitleNumber(0);
listenerPanel[8].setTitleNumber(m);
listenerPanel[8].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[6])){
if(listenerPanel[3].getTitleNumber()==0){
listenerPanel[6].setBackground(Color.white);
listenerPanel[6].setTitleNumber(0);
listenerPanel[3].setTitleNumber(m);
listenerPanel[3].setBackground(Color.darkGray);
}
if(listenerPanel[7].getTitleNumber()==0){
listenerPanel[6].setBackground(Color.white);
listenerPanel[6].setTitleNumber(0);
listenerPanel[7].setTitleNumber(m);
listenerPanel[7].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[7])){
if(listenerPanel[6].getTitleNumber()==0){
listenerPanel[7].setBackground(Color.white);
listenerPanel[7].setTitleNumber(0);
listenerPanel[6].setTitleNumber(m);
listenerPanel[6].setBackground(Color.darkGray);
}
if(listenerPanel[8].getTitleNumber()==0){
listenerPanel[7].setBackground(Color.white);
listenerPanel[7].setTitleNumber(0);
listenerPanel[8].setTitleNumber(m);
listenerPanel[8].setBackground(Color.darkGray);
}
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[7].setBackground(Color.white);
listenerPanel[7].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
}else {
if(listenerPanel[5].getTitleNumber()==0){
listenerPanel[8].setBackground(Color.white);
listenerPanel[8].setTitleNumber(0);
listenerPanel[5].setTitleNumber(m);
listenerPanel[5].setBackground(Color.darkGray);
}
if(listenerPanel[7].getTitleNumber()==0){
listenerPanel[8].setBackground(Color.white);
listenerPanel[8].setTitleNumber(0);
listenerPanel[7].setTitleNumber(m);
listenerPanel[7].setBackground(Color.darkGray);
}
}
boolean b=true;//是否完成標(biāo)記
for(int i=0;ilistenerPanel.length;i++){//判斷l(xiāng)istenerPanel[0]~listenerPanel[8]上的數(shù)字是從0~8.若是完成拼圖
if(listenerPanel[i].getTitleNumber()!=i)
b=false;
}
if(b==true){
int i=JOptionPane.showConfirmDialog(null, "would you paly agin?");
if(i==0){
if(i==0){
Rectangle re=this.getBounds();
this.dispose();
SlidingPuzzle slidingPuzzle=new SlidingPuzzle();
slidingPuzzle.setBounds(re);
}
else if(i==1)
System.exit(0);
else ;
}
}
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
}
如果運(yùn)行過程什么問題追問或者h(yuǎn)i
張小喜告別996 實(shí)現(xiàn)高效編程 減少開發(fā)壓力 開啟Java高效編程之門(完整版高清視頻)百度網(wǎng)盤 ?
鏈接:
提取碼: aizj 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦? ?
若資源有問題歡迎追問~ ?
package temp;
import sun.misc.Sort;
/**
* @author zengjl
* @version 1.0
* @since 2007-08-22
* @Des java幾種基本排序方法
*/
/**
* SortUtil:排序方法
* 關(guān)于對排序方法的選擇:這告訴我們,什么時(shí)候用什么排序最好。當(dāng)人們渴望先知道排在前面的是誰時(shí),
* 我們用選擇排序;當(dāng)我們不斷拿到新的數(shù)并想保持已有的數(shù)始終有序時(shí),我們用插入排序;當(dāng)給出的數(shù)
* 列已經(jīng)比較有序,只需要小幅度的調(diào)整一下時(shí),我們用冒泡排序。
*/
public class SortUtil extends Sort {
/**
* 插入排序法
* @param data
* @Des 插入排序(Insertion Sort)是,每次從數(shù)列中取一個(gè)還沒有取出過的數(shù),并按照大小關(guān)系插入到已經(jīng)取出的數(shù)中使得已經(jīng)取出的數(shù)仍然有序。
*/
public int[] insertSort(int[] data) {
1/11頁
int temp;
for (int i = 1; i data.length; i++) {
for (int j = i; (j 0) (data[j] data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
return data;
}
/**
* 冒泡排序法
* @param data
* @return
* @Des 冒泡排序(Bubble Sort)分為若干趟進(jìn)行,每一趟排序從前往后比較每兩個(gè)相鄰的元素的大?。ㄒ虼艘惶伺判蛞容^n-1對位置相鄰的數(shù))并在
* 每次發(fā)現(xiàn)前面的那個(gè)數(shù)比緊接它后的數(shù)大時(shí)交換位置;進(jìn)行足夠多趟直到某一趟跑完后發(fā)現(xiàn)這一趟沒有進(jìn)行任何交換操作(最壞情況下要跑n-1趟,
* 這種情況在最小的數(shù)位于給定數(shù)列的最后面時(shí)發(fā)生)。事實(shí)上,在第一趟冒泡結(jié)束后,最后面那個(gè)數(shù)肯定是最大的了,于是第二次只需要對前面n-1
* 個(gè)數(shù)排序,這又將把這n-1個(gè)數(shù)中最小的數(shù)放到整個(gè)數(shù)列的倒數(shù)第二個(gè)位置。這樣下去,冒泡排序第i趟結(jié)束后后面i個(gè)數(shù)都已經(jīng)到位了,第i+1趟實(shí)
* 際上只考慮前n-i個(gè)數(shù)(需要的比較次數(shù)比前面所說的n-1要?。?。這相當(dāng)于用數(shù)學(xué)歸納法證明了冒泡排序的正確性
這使用遞歸的方式實(shí)現(xiàn)自己調(diào)用自己方法的循環(huán)語句。
題中最終目的是為了檢索數(shù)組s中有沒有“華”字。
return
name(i+1,
j,
index+1)+name(i,
j+1,
index+1);的目的就是為了循環(huán);
其中
name(i+1,
j,
index+1)
是從
s
中以縱向方式抽取第
i
個(gè)【小組】中的第一個(gè)元素
來和
string
中的第
index
個(gè)元素比較(此時(shí)
i
=
index);
而
name(i,
j+1,
index+1);
是從
s
中以橫向方式抽取第
i
個(gè)【小組】中的第
j
個(gè)元素
來和
string
中的第
index
個(gè)元素比較(此時(shí)
j
=
index);
這樣便以“網(wǎng)格”的方式比對了s中的每一個(gè)元素。
如何用70行Java代碼實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)算法
import java.util.Random;
public class BpDeep{
public double[][] layer;//神經(jīng)網(wǎng)絡(luò)各層節(jié)點(diǎn)
public double[][] layerErr;//神經(jīng)網(wǎng)絡(luò)各節(jié)點(diǎn)誤差
public double[][][] layer_weight;//各層節(jié)點(diǎn)權(quán)重
public double[][][] layer_weight_delta;//各層節(jié)點(diǎn)權(quán)重動量
public double mobp;//動量系數(shù)
public double rate;//學(xué)習(xí)系數(shù)
public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;llayernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;jlayernum[l]+1;j++)
for(int i=0;ilayernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機(jī)初始化權(quán)重
}
}
}
//逐層向前計(jì)算輸出
public double[] computeOut(double[] in){
for(int l=1;llayer.length;l++){
for(int j=0;jlayer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;ilayer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計(jì)算誤差并修改權(quán)重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;jlayerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);
while(l--0){
for(int j=0;jlayerErr[l].length;j++){
double z = 0.0;
for(int i=0;ilayerErr[l+1].length;i++){
z=z+l0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動量調(diào)整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權(quán)重調(diào)整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動量調(diào)整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權(quán)重調(diào)整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}
public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
分享名稱:java頻繁算法代碼 java常見的算法
網(wǎng)站URL:http://jinyejixie.com/article10/hepggo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、App設(shè)計(jì)、網(wǎng)站營銷、小程序開發(fā)、搜索引擎優(yōu)化、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)