最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java開發(fā)實(shí)現(xiàn)五子棋游戲

 更新時(shí)間:2021年09月17日 11:50:14   作者:冷丁_  
這篇文章主要為大家詳細(xì)介紹了java開發(fā)實(shí)現(xiàn)五子棋游戲,具有雙人對戰(zhàn)和人機(jī)對戰(zhàn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

此游戲具有雙人對戰(zhàn)功能和人機(jī)對戰(zhàn)功能

一、游戲界面的實(shí)現(xiàn)

一個(gè)游戲首先從設(shè)計(jì)界面開始

1、首先創(chuàng)建一個(gè)類,作用是通過對窗體組件的一些設(shè)置來實(shí)現(xiàn)簡單游戲界面

public void gameUI(){
 //窗體組件
        MyFrame jf = new MyFrame();
        jf.setSize(900, 800);
        jf.setTitle("冷丁-五子棋");
        //居中顯示
        jf.setLocationRelativeTo(null);
        //設(shè)置退出進(jìn)程
        jf.setDefaultCloseOperation(3);
        //流式布局管理器
        FlowLayout flow=new FlowLayout();
        jf.setLayout(flow);
        //邊框布局
        BorderLayout border=new BorderLayout();
        jf.setLayout(border);
        //面板: JPanel 默認(rèn)流式布局
        JPanel eastPanel=new JPanel();
        Dimension dm=new Dimension(100,0);
        //除了JFrame,其他組件設(shè)置大小都是該方法
        eastPanel.setPreferredSize(dm);
        jf.add(eastPanel,BorderLayout.EAST);
}

2、加入功能按鈕

JButton jbu=new JButton("開始");
        eastPanel.add(jbu,BorderLayout.EAST);
        JButton jbu2=new JButton("悔棋");
        eastPanel.add(jbu2,BorderLayout.EAST);
        JButton jbu3=new JButton("認(rèn)輸");
        eastPanel.add(jbu3,BorderLayout.EAST);
        JButton jbu4=new JButton("人機(jī)對戰(zhàn)");
        eastPanel.add(jbu4,BorderLayout.EAST);
        //設(shè)置窗體可見
        jf.setVisible(true);

每個(gè)按鈕添加ActionListner監(jiān)聽

jbu.addActionListener(mouse);
jbu2.addActionListener(mouse);
jbu3.addActionListener(mouse);
jbu4.addActionListener(mouse);

在GameMouse類中對過對actionPerformed方法的重新來判斷當(dāng)前是哪個(gè)按鈕按下,并實(shí)現(xiàn)對應(yīng)的功能

public void actionPerformed(ActionEvent e) {
        //獲取按鈕上的內(nèi)容
        String name=e.getActionCommand();
        System.out.println("點(diǎn)擊按鈕:"+name);
        if(name.equals("開始")){
            jf.removeMouseListener(this);
            jf.addMouseListener(this);
            startflag=false;
            flag=false;
            gameOver=false;
            for(int i=0;i<15;i++){
                for(int j=0;j<15;j++){
                    arrChess[i][j]=0;
                }
            }
            jf.paint(gr);
        }else if(name.equals("悔棋")){
            arrChess[nowx][nowy]=0;
            jf.paint(gr);
            this.flag=!this.flag;
        }
        else if(name.equals("認(rèn)輸")){
            if(this.flag){
                gr.setColor(Color.red);
                gr.setFont(new Font("TimesRoman", Font.BOLD, 50));
                gr.drawString("黑方獲勝!",300,300);
            }else{
                gr.setColor(Color.red);
                gr.setFont(new Font("TimesRoman", Font.BOLD, 50));
                gr.drawString("白方獲勝!",300,300);
            }
        }else if(name.equals("人機(jī)對戰(zhàn)")){
            jf.removeMouseListener(this);
            jf.addMouseListener(this);
            startflag=false;
            flag=false;
            gameOver=false;
            for(int i=0;i<15;i++){
                for(int j=0;j<15;j++){
                    arrChess[i][j]=0;
                }
            }
            this.aiflag=true;
            jf.paint(gr);
        }

    }

3、游戲效果是通過畫筆畫在組件上實(shí)現(xiàn)的,獲取畫筆:圖形顯示在哪個(gè)組件上,畫筆就從該組件上獲取。
注意從窗體上獲取畫筆對象,一定要在窗體顯示可見之后

Graphics g = jf.getGraphics();

4、當(dāng)我們點(diǎn)擊按鈕時(shí),應(yīng)該實(shí)現(xiàn)相應(yīng)的功能,為了實(shí)現(xiàn)人機(jī)交互,需要添加監(jiān)聽器

監(jiān)聽器

a.事件源:當(dāng)前動(dòng)作所發(fā)生的組件
b.確定監(jiān)聽器方法:鼠標(biāo)監(jiān)聽器方法
c.綁定處理類
給窗口添加鼠標(biāo)監(jiān)聽器方法
注意:由于接口不能創(chuàng)建對象,重新定義類繼承(實(shí)現(xiàn))接口,重寫接口中的抽象方法

GameMouse mouse = new GameMouse();
        mouse.setJf(jf);
        jbu.addActionListener(mouse);
        jbu2.addActionListener(mouse);
        jbu3.addActionListener(mouse);
        jbu4.addActionListener(mouse);
        mouse.setGr(g);
        //把GameMouse類中的數(shù)組傳遞給MyFrame類
        jf.setArrChess(mouse.getArrChess());

二、完成自定義窗口類

單純使用JFrame存在一個(gè)問題,就是當(dāng)我們移動(dòng)窗口或窗口產(chǎn)生改變時(shí),之前畫在窗口組件上的畫面就消失不見了
原因是每當(dāng)窗口組件受到影響或發(fā)生改變時(shí),都會(huì)自動(dòng)的調(diào)用其paint函數(shù),這時(shí)候畫面就會(huì)被刷新,之前畫的東西就不見了
為了解決這個(gè)問題,我們需要自定義一個(gè)自己的窗口類MyFrame,繼承JFrame,通過重寫JFrame的paint方法來解決此問題
###自定義窗口類MyFrame

public class MyFrame extends JFrame implements Config{
    private int[][] arrChess;

    public void setArrChess(int[][] arrChess){
        this.arrChess = arrChess;
    }

    //重寫繪制組件的方法
    //super 表示當(dāng)前類的父類對象
    //this  表示本類對象
    public void paint(Graphics g){
        //1.繪制組件
        super.paint(g);
        System.out.println("繪制自定義窗體類!");
        //2.繪制棋盤,棋子
        g.setColor(Color.black);
        for(int i=0;i<LINE;i++){
            g.drawLine(X0, Y0+i*SIZE, (LINE-1)*SIZE+X0, Y0+i*SIZE);
            g.drawLine(X0+i*SIZE, Y0, X0+i*SIZE, (LINE-1)*SIZE+Y0);
        }
        //遍歷arrChess
        for(int i=0;i<15;i++){
            for(int j=0;j<15;j++){
                if(arrChess[i][j]==1){
                    g.setColor(Color.black);
                    g.fillOval(i*SIZE+25, j*SIZE+25, 50, 50);
                }
                else if(arrChess[i][j]==2){
                    g.setColor(Color.white);
                    g.fillOval(i*SIZE+25, j*SIZE+25, 50, 50);
                }
            }
        }
    }
}

這里通過循環(huán)和drawLine方法繪制出棋盤
arrChess是一個(gè)二維數(shù)組存放了當(dāng)前的棋局情況,后面會(huì)詳細(xì)說明。此類中通過遍歷此數(shù)組每次重新畫一遍棋局就可以維持游戲畫面的正確。

三、游戲功能實(shí)現(xiàn)

1、首先要將棋子黑白交替的畫在棋盤的交點(diǎn)上

首先mouseClicked類傳進(jìn)的參數(shù)為MouseEvent e
調(diào)用e.getX();e.getY();方法可以得到鼠標(biāo)點(diǎn)擊的位置坐標(biāo)
由于玩家在玩游戲時(shí)點(diǎn)擊的位置不一定正好是棋盤交點(diǎn)的位置,但是我們可以簡單的計(jì)算出鼠標(biāo)點(diǎn)擊位置最近的焦點(diǎn),只需要計(jì)算出這個(gè)位置最近的
交點(diǎn)是第幾行和第幾列就可以了
用當(dāng)前坐標(biāo)x-原點(diǎn)X0 對棋子的大小SIZE取余,如果這個(gè)值大于棋子大小SIZE/2 則判斷橫坐標(biāo)xx=(x-X0)/SIZE+1
否則判斷橫坐標(biāo)xx=(x-X0)/SIZE
y坐標(biāo)同理 代碼如下

public void mouseClicked(MouseEvent e){
        System.out.println(this.aiflag);
        this.flag=!flag;
        System.out.println("點(diǎn)擊");
        //獲取當(dāng)前坐標(biāo)
        int x = e.getX();
        int y = e.getY();

        //計(jì)算交點(diǎn)值
        if((x-X0)%SIZE > SIZE/2 ){
            xx = (x-X0)/SIZE+1;
        }else{
            xx = (x-X0)/SIZE;
        }
        if((y-Y0)%SIZE > SIZE/2 ){
            yy = (y-Y0)/SIZE+1;
        }else{
            yy = (y-Y0)/SIZE;
        }
}

2、交替畫黑白棋

交替畫黑白棋只需要加入一個(gè)flag標(biāo)志,每次判斷這個(gè)標(biāo)志
如果flag為true則畫黑棋,將數(shù)組賦值為1
如果flag為false則畫白棋,將數(shù)組賦值為2
每次畫完棋后,將flag取反

代碼如下

if (arrChess[xx][yy] == 0) {
                if (this.flag == true)
                    arrChess[xx][yy] = 1;
                else arrChess[xx][yy] = 2;
                if (this.flag)
                    gr.setColor(Color.black);
                else gr.setColor(Color.white);
                gr.fillOval(xx * SIZE + 25, yy * SIZE + 25, 50, 50);

            } else {
                this.flag = !this.flag;
      }

3、判斷輸贏方法的實(shí)現(xiàn)

判斷輸贏通過遍歷數(shù)組實(shí)現(xiàn),在上述講解中我們知道,整個(gè)棋局的情況都存儲(chǔ)在二維數(shù)組arrChess[][]中
若arrChess[3][5]=1,就說明第三行第五列這個(gè)位置上為黑棋
所以通過遍歷這個(gè)數(shù)組我們就可以掌握整個(gè)棋局從而對輸贏做出判斷
五子棋在橫著、豎著、斜著三個(gè)方向任意一個(gè)方向上連成五個(gè)相同顏色的棋子都可以獲勝
這里將三個(gè)方向分為四種情況判斷:
第一種情況:棋子橫向連珠的數(shù)目,也就是一個(gè)棋子向左找,向右找,和自己顏色相同的數(shù)目和
第二種情況:棋子縱向連珠的數(shù)目,一個(gè)棋子向上找和向下找,和自己顏色相同的數(shù)目和
第三種情況:棋子正對角線連珠的數(shù)目,一個(gè)棋子向右上方找、左下方找和自己顏色相同的數(shù)目和
第四種情況:棋子反對角線連珠的數(shù)目,一個(gè)棋子向左上方找、右下方找和自己顏色相同的數(shù)目和

第一種情況:棋子橫向連珠的數(shù)目,也就是一個(gè)棋子向左找,向右找,和自己顏色相同的數(shù)目和

代碼如下

int sum = 0;
            for (int i = xx; i > 0; i--) {
                if (arrChess[i][yy] == 1) sum++;
                else if (arrChess[i][yy] == 2||arrChess[i][yy]==0) break;
            }
            for (int i = xx + 1; i < 15; i++) {
                if (arrChess[i][yy] == 1) sum++;
                else if (arrChess[i][yy] == 2||arrChess[i][yy]==0) break;
            }
            if (sum >= 5) {
                System.out.println("black win!");
                gr.setColor(Color.red);
                gr.setFont(new Font("TimesRoman", Font.BOLD, 50));
                gr.drawString("黑方獲勝!",300,300);
                gameOver = true;
            }

第二種情況:棋子縱向連珠的數(shù)目,一個(gè)棋子向上找和向下找,和自己顏色相同的數(shù)目和

代碼如下

sum = 0;
                for (int i = yy; i > 0; i--) {
                    if (arrChess[xx][i] == 1) sum++;
                    else if (arrChess[xx][i] == 2||arrChess[xx][i] == 0) break;
                }
                for (int i = yy + 1; i < 15; i++) {
                    if (arrChess[xx][i] == 1) sum++;
                    else if (arrChess[xx][i] == 2||arrChess[xx][i] == 0) break;
                }
                if (sum >= 5) {
                    System.out.println("black win!");
                    gr.setColor(Color.red);
                    gr.setFont(new Font("TimesRoman", Font.BOLD, 50));
                    gr.drawString("黑方獲勝!",300,300);
                    gameOver = true;


}

第三種情況:棋子正對角線連珠的數(shù)目,一個(gè)棋子向右上方找、左下方找和自己顏色相同的數(shù)目和

if (!gameOver) {
                sum = 1;
                int temp = min(5, xx);
                temp = min(temp, yy);
                for (int i = 1; i < temp; i++) {
                    if (arrChess[xx - i][yy - i] == 1) sum++;
                    else if (arrChess[xx - i][yy - i] == 2||arrChess[xx - i][yy - i] == 0) break;
                }
                temp = min(5, 15 - xx);
                temp = min(temp, 15 - yy);
                for (int i = 1; i < temp; i++) {
                    if (arrChess[xx + i][yy + i] == 1) sum++;
                    else if (arrChess[xx + i][yy + i] == 2||arrChess[xx + i][yy + i] == 0) break;
                }

                if (sum >= 5) {
                    System.out.println("black win!");
                    gr.setColor(Color.red);
                    gr.setFont(new Font("TimesRoman", Font.BOLD, 50));
                    gr.drawString("黑方獲勝!",300,300);
                    gameOver = true;


                }
            }

第四種情況:棋子反對角線連珠的數(shù)目,一個(gè)棋子向左上方找、右下方找和自己顏色相同的數(shù)目和

if (!gameOver) {
                sum = 1;
                int temp = min(5, 15 - xx);
                temp = min(temp, yy);
                for (int i = 1; i < temp; i++) {
                    if (arrChess[xx + i][yy - i] == 1) sum++;
                    else if (arrChess[xx + i][yy - i] == 2||arrChess[xx + i][yy - i] == 0) break;
                }
                temp = min(5, xx);
                temp = min(temp, 15 - yy);
                for (int i = 1; i < temp; i++) {
                    if (arrChess[xx - i][yy + i] == 1) sum++;
                    else if (arrChess[xx - i][yy + i] == 2||arrChess[xx - i][yy + i] == 0) break;
                }

                if (sum >= 5) {
                    System.out.println("black win!");
                    gr.setColor(Color.red);
                    gr.setFont(new Font("TimesRoman", Font.BOLD, 50));
                    gr.drawString("黑方獲勝!",300,300);
                    gameOver = true;

                }
            }
        }

上面展示了黑棋獲勝的判斷方法 白棋獲勝的判斷方法同理

4、AI電腦下棋 實(shí)現(xiàn)人機(jī)對戰(zhàn)

人機(jī)對戰(zhàn)使用權(quán)值算法來實(shí)現(xiàn),通過對棋局情況的判斷,自己設(shè)定好每種情況權(quán)值的大小
電腦以防守為主
權(quán)值設(shè)置如下

public void setHm() {
        this.hm.put("1",40);
        this.hm.put("11",400);
        this.hm.put("111",4000);
        this.hm.put("1111",6000);

        this.hm.put("12",40);
        this.hm.put("112",400);
        this.hm.put("1112",4000);
        this.hm.put("11112",6000);

        this.hm.put("2",20);
        this.hm.put("22",200);
        this.hm.put("222",2000);
        this.hm.put("2222",8000);

        this.hm.put("21",10);
        this.hm.put("221",100);
        this.hm.put("2221",1000);
        this.hm.put("22221",2000);

    }

簡單解釋一下 1112代表三個(gè)黑棋一個(gè)白棋 權(quán)值為4000
而11112代表四個(gè)黑棋和一個(gè)白棋 這種情況顯然更危險(xiǎn),權(quán)值設(shè)置為6000
人機(jī)下棋的思路主要是,遍歷棋盤上每個(gè)空位置周圍的棋局情況
因?yàn)闄C(jī)器可以選擇任何一個(gè)空位置下棋
每個(gè)空位置周圍的棋局情況一定對應(yīng)已經(jīng)設(shè)置好的權(quán)值中的一個(gè),如果一個(gè)位置周圍有多個(gè)權(quán)值對應(yīng)
則把他們權(quán)值相加綜合判斷

當(dāng)確定好每個(gè)空位置的權(quán)值后,選擇權(quán)值最大的也就是最危險(xiǎn)的位置下棋,已實(shí)現(xiàn)防守

ai算法的時(shí)候和使用到了前面判斷輸贏的方法,總體原理和之前判斷輸贏相同
只不過多了一步計(jì)算權(quán)值
權(quán)值表存儲(chǔ)在HashMap中,遍歷的過程將每個(gè)空位周圍有棋子的情況用字符串存儲(chǔ)起來
最后在通過從HashMap中查找對應(yīng)的權(quán)值來找到該位置的權(quán)值 Integer value=hm.get(s);

實(shí)現(xiàn)代碼如下

public void ai(){
        for(int i=0;i<15;i++){
            for(int j=0;j<15;j++){
                chessValue[i][j]=0;
            }
        }
        this.setHm();
        for (int i = 0; i <15 ; i++) {
            for(int j=0;j<15;j++){
                //向下
                if(arrChess[i][j]==0){
                    String s="";
                    int c=0;
                    for(int k=j+1;k<15;k++){
                        if(arrChess[i][k]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[i][k];
                                s+=arrChess[i][k];
                            }else if(arrChess[i][k]==c){
                                s+=arrChess[i][k];
                            }else{
                                s+=arrChess[i][k];
                                break;
                            }
                        }
                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }
                }
                //向上
                if(arrChess[i][j]==0){
                    String s="";
                    int c=0;
                    for(int k=j-1;k>0;k--){
                        if(arrChess[i][k]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[i][k];
                                s+=arrChess[i][k];
                            }else if(arrChess[i][k]==c){
                                s+=arrChess[i][k];
                            }else{
                                s+=arrChess[i][k];
                                break;
                            }
                        }
                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }
                }
                //向左
                if(arrChess[i][j]==0){
                    String s="";
                    int c=0;
                    for(int k=i-1;k>0;k--){
                        if(arrChess[k][j]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[k][j];
                                s+=arrChess[k][j];
                            }else if(arrChess[k][j]==c){
                                s+=arrChess[k][j];
                            }else{
                                s+=arrChess[k][j];
                                break;
                            }
                        }
                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }
                }
                //向右
                if(arrChess[i][j]==0){
                    String s="";
                    int c=0;
                    for(int k=i+1;k<15;k++){
                        if(arrChess[k][j]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[k][j];
                                s+=arrChess[k][j];
                            }else if(arrChess[k][j]==c){
                                s+=arrChess[k][j];
                            }else{
                                s+=arrChess[k][j];
                                break;
                            }
                        }
                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }
                }
                //對角線1--
                if(arrChess[i][j]==0){
                    int temp=100;
                    temp=min(temp,i);
                    temp=min(temp,j);
                    String s="";
                    int c=0;
                    for(int k=1;k<=temp;k++){
                            if(arrChess[i-k][j-k]==0){
                                break;
                            }else{
                                if(c==0){
                                    c=arrChess[i-k][j-k];
                                    s+=arrChess[i-k][j-k];
                                }else if(arrChess[i-k][j-k]==c){
                                    s+=arrChess[i-k][j-k];
                                }else{
                                    s+=arrChess[i-k][j-k];
                                    break;
                                }
                            }

                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }

                }
                //對角線2 -- ++
                if(arrChess[i][j]==0){
                    int temp=100;
                    temp=min(temp,14-i);
                    temp=min(temp,14-j);
                    String s="";
                    int c=0;
                    for(int k=1;k<=temp;k++){
                        if(arrChess[i+k][j+k]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[i+k][j+k];
                                s+=arrChess[i+k][j+k];
                            }else if(arrChess[i+k][j+k]==c){
                                s+=arrChess[i+k][j+k];
                            }else{
                                s+=arrChess[i+k][j+k];
                                break;
                            }
                        }

                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }

                }
                //對角線2 -- ++ +-
                if(arrChess[i][j]==0){
                    int temp=100;
                    temp=min(temp,14-i);
                    temp=min(temp,j);
                    String s="";
                    int c=0;
                    for(int k=1;k<=temp;k++){
                        if(arrChess[i+k][j-k]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[i+k][j-k];
                                s+=arrChess[i+k][j-k];
                            }else if(arrChess[i+k][j-k]==c){
                                s+=arrChess[i+k][j-k];
                            }else{
                                s+=arrChess[i+k][j-k];
                                break;
                            }
                        }

                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }

                }
                //對角線2 -- ++ +- -+
                if(arrChess[i][j]==0){
                    int temp=100;
                    temp=min(temp,i);
                    temp=min(temp,14-j);
                    String s="";
                    int c=0;
                    for(int k=1;k<=temp;k++){
                        if(arrChess[i-k][j+k]==0){
                            break;
                        }else{
                            if(c==0){
                                c=arrChess[i-k][j+k];
                                s+=arrChess[i-k][j+k];
                            }else if(arrChess[i-k][j+k]==c){
                                s+=arrChess[i-k][j+k];
                            }else{
                                s+=arrChess[i-k][j+k];
                                break;
                            }
                        }

                    }
                    Integer value=hm.get(s);
                    if(value!=null){
                        chessValue[i][j]+=value;
                    }

                }

            }
        }
        int maxx=-1;
        int mx=0,my=0;
        for(int i=0;i<15;i++){
            for(int j=0;j<15;j++){
                if(chessValue[i][j]>maxx){
                    maxx=chessValue[i][j];

                    mx=i;
                    my=j;
                }
            }
        }
        gr.setColor(Color.white);
        gr.fillOval(mx*SIZE+25, my*SIZE+25, 50, 50);
        arrChess[mx][my]=2;
        Judge2(mx,my);
    }
}

游戲過程如下

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你搞懂Spring響應(yīng)式編程

    一文帶你搞懂Spring響應(yīng)式編程

    相信響應(yīng)式編程經(jīng)常會(huì)在各種地方被提到。本篇就為大家從函數(shù)式編程一直到Spring?WeFlux做一次簡單的講解,并給出一些示例,希望大家可以更好的理解響應(yīng)式編程
    2022-07-07
  • 通過一個(gè)命令輕松切換Java的版本

    通過一個(gè)命令輕松切換Java的版本

    這篇文章主要給大家介紹了如何通過一個(gè)命令輕松實(shí)現(xiàn)切換Java的版本,通過本文介紹的方法,大家就可以將jdk版本之間輕松切換,需要的朋友可以參考學(xué)習(xí),下面跟著小編一起來看看吧。
    2017-05-05
  • java虛擬機(jī)創(chuàng)建失敗的原因整理

    java虛擬機(jī)創(chuàng)建失敗的原因整理

    在本篇文章里小編給大家整理了關(guān)于創(chuàng)建java虛擬機(jī)失敗的解決方法和知識(shí)點(diǎn),需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02
  • Java語言實(shí)現(xiàn)掃雷游戲(1)

    Java語言實(shí)現(xiàn)掃雷游戲(1)

    這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • mybatis多表查詢的實(shí)現(xiàn)(xml方式)

    mybatis多表查詢的實(shí)現(xiàn)(xml方式)

    本文主要介紹了mybatis多表查詢的實(shí)現(xiàn)(xml方式),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • SpringBoot整合jasypt實(shí)現(xiàn)敏感信息的加密詳解

    SpringBoot整合jasypt實(shí)現(xiàn)敏感信息的加密詳解

    一般公司的核心業(yè)務(wù)代碼中,都會(huì)存在與數(shù)據(jù)庫、第三方通信的secret key等敏感信息,如果以明文的方式存儲(chǔ),一旦泄露,那將會(huì)給公司帶來巨大的損失。本篇文章通過講解:Springboot集成Jasypt對項(xiàng)目敏感信息進(jìn)行加密,提高系統(tǒng)的安全性
    2022-09-09
  • Java格式化輸出詳細(xì)講解(printf、print、println、format等)

    Java格式化輸出詳細(xì)講解(printf、print、println、format等)

    Java的格式化輸出等同于String.Format,與C有很大的相似,下面這篇文章主要給大家介紹了關(guān)于Java格式化輸出(printf、print、println、format等)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • JAVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析

    JAVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析

    下面小編就為大家?guī)硪黄狫AVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • Java如何讀取XML文件 具體實(shí)現(xiàn)

    Java如何讀取XML文件 具體實(shí)現(xiàn)

    這篇文章主要介紹了Java如何讀取XML文件 具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • SpringBoot集成內(nèi)存數(shù)據(jù)庫hsqldb的實(shí)踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫hsqldb的實(shí)踐

    hsqldb只需要添加對應(yīng)的依賴,然后在配置文件進(jìn)行配置。不需要安裝一個(gè)數(shù)據(jù)庫,本文就來介紹一下具體使用,感興趣的可以了解一下
    2021-09-09

最新評論

会泽县| 楚雄市| 嵊州市| 安溪县| 洱源县| 兴和县| 长子县| 琼海市| 师宗县| 高安市| 垫江县| 武定县| 湖北省| 连云港市| 新泰市| 叙永县| 罗源县| 昌黎县| 和田县| 泌阳县| 林口县| 平和县| 萝北县| 佛教| 澄迈县| 锡林郭勒盟| 沧州市| 海城市| 西和县| 长乐市| 崇州市| 九寨沟县| 泰和县| 云浮市| 鄂托克前旗| 汝阳县| 灵璧县| 台南市| 杂多县| 平原县| 莫力|