欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單實現(xiàn)java數(shù)獨游戲

 更新時間:2017年12月18日 11:43:14   作者:Wyx_  
這篇文章主要教大家如何簡單實現(xiàn)java數(shù)獨游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java數(shù)獨游戲的具體代碼,供大家參考,具體內(nèi)容如下

打算把javaFx需要的組件裝好以后直接用javaFx的,但似乎eclipse的版本不對,安裝了也不能用...
數(shù)獨代碼是在之前寒假受命寫的,學(xué)了一個月java的成果,現(xiàn)在看來有些不足但畢竟是第一個程序,就直接放上來,數(shù)獨終盤的實現(xiàn)直接用了暴力,時間復(fù)雜度有點高,懶得改了直接放代碼

終盤實現(xiàn):

import java.util.Random; 
 
public class SudokuPuzzleGenerator { 
 private Random random = new Random(); 
  
 private static final int MAX_CALL_RANDOM_ARRAY_TIMES = 220; 
  
 private int currentTimes = 0; 
 
 public int[][] generatePuzzleMatrix() { 
 
  int[][] randomMatrix = new int[9][9]; 
 
  for (int row = 0; row < 9; row++) { 
   if (row == 0) { 
    currentTimes = 0; 
    randomMatrix[row] = buildRandomArray(); 
 
   } else { 
    int[] tempRandomArray = buildRandomArray(); 
 
    for (int col = 0; col < 9; col++) { 
     if (currentTimes < MAX_CALL_RANDOM_ARRAY_TIMES) { 
      if (!isCandidateNmbFound(randomMatrix, tempRandomArray, row, col)) { 
        
       resetValuesInRowToZero(randomMatrix,row); 
       row -= 1; 
       col = 8; 
       tempRandomArray = buildRandomArray(); 
      } 
     } else {  
      row = -1; 
      col = 8; 
      resetValuesToZeros(randomMatrix); 
      currentTimes = 0; 
     } 
    } 
   } 
  } 
  return randomMatrix; 
 } 
  
 private void resetValuesInRowToZero(int[][] matrix, int row) 
 { 
  for (int j = 0; j < 9; j++) { 
   matrix[row][j] = 0; 
  } 
   
 } 
 
 private void resetValuesToZeros(int[][] matrix) { 
  for (int row = 0; row < 9; row++) { 
   for (int col = 0; col < 9; col++) { 
    matrix[row][col] = 0; 
   } 
  } 
 } 
 
 private boolean isCandidateNmbFound(int[][] randomMatrix, int[] randomArray, int row, int col) { 
  for (int i = 0; i < 9; i++) { 
   randomMatrix[row][col] = randomArray[i]; 
   if (noConflict(randomMatrix, row, col)) { 
    return true; 
   } 
  } 
  return false; 
 } 
 
 private boolean noConflict(int[][] candidateMatrix, int row, int col) { 
  return noConflictInRow(candidateMatrix, row, col)&&noConflictInColumn(candidateMatrix, row, col) && noConflictInBlock(candidateMatrix, row, col); 
 } 
 
 private boolean noConflictInRow(int[][] candidateMatrix, int row, int col) { 
   
  int currentValue = candidateMatrix[row][col]; 
 
  for (int colNum = 0; colNum < col; colNum++) { 
   if (currentValue == candidateMatrix[row][colNum]) { 
    return false; 
   } 
  } 
 
  return true; 
 } 
 
 private boolean noConflictInColumn(int[][] candidateMatrix, int row, int col) { 
 
  int currentValue = candidateMatrix[row][col]; 
 
  for (int rowNum = 0; rowNum < row; rowNum++) { 
   if (currentValue == candidateMatrix[rowNum][col]) { 
    return false; 
   } 
  } 
 
  return true; 
 } 
 
 private boolean noConflictInBlock(int[][] candidateMatrix, int row, int col) { 
 
  int baseRow = row / 3 * 3; 
  int baseCol = col / 3 * 3; 
 
  for (int rowNum = 0; rowNum < 8; rowNum++) { 
   if (candidateMatrix[baseRow + rowNum / 3][baseCol + rowNum % 3] == 0) { 
    continue; 
   } 
   for (int colNum = rowNum + 1; colNum < 9; colNum++) { 
    if (candidateMatrix[baseRow + rowNum / 3][baseCol + rowNum % 3] == candidateMatrix[baseRow 
      + colNum / 3][baseCol + colNum % 3]) { 
     return false; 
    } 
   } 
  } 
  return true; 
 
 }  
 private int[] buildRandomArray() { 
  currentTimes++; 
  int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
  int randomInt = 0;  
  for (int i = 0; i < 20; i++) { 
   randomInt = random.nextInt(8) + 1; 
   int temp = array[0]; 
   array[0] = array[randomInt]; 
   array[randomInt] = temp; 
  } 
 
  return array; 
 } 
  
 public int getCurrentTimes() { 
  return currentTimes; 
 } 
  
 public void setCurrentTimes(int currentTimes) { 
  this.currentTimes = currentTimes; 
 } 
  
} 

界面及判斷:
用swing寫的

import javax.swing.*;  
import java.awt.*; 
import java.awt.event.*; 
import java.util.Random; 
 
public class ShuD extends JFrame{ 
 private static final long serialVersionUID = 5952689219411916553L; //序列化字段 
 private static JTextField a[][] = new JTextField[9][9];  //存儲文本框中的數(shù)字 
 static int ans[][] = new int[9][9];  //存儲輸入后的兩位數(shù)組 
 SudokuPuzzleGenerator example = new SudokuPuzzleGenerator(); 
 public int right[][] = example.generatePuzzleMatrix(); 
 public int rightans[][]; 
 private int[][] Wk(int a[][]){    //挖空 
  Random r = new Random(); 
  int a1, a2; 
  a1 = r.nextInt(9); 
  a2 = r.nextInt(9); 
  for(int i = 0; i < 100; i++) 
  { 
   a[a1][a2] = 0; 
   a1 = r.nextInt(9); 
   a2 = r.nextInt(9); 
  } 
  return a; 
 } 
 public ShuD(){ 
  Container c = getContentPane(); 
  c.setLayout(new BorderLayout(2, 1));  //邊框布局 
  JMenuItem jmiOk = new JMenuItem("提交");  //定義菜單 
  JMenuItem jmiExplain = new JMenuItem("詳情"); 
  JMenuItem jmiMessage = new JMenuItem("信息"); 
   
  JPanel panel = new JPanel();  //定義一個容器 
  panel.add(jmiOk);     //將菜單在容器內(nèi)顯示 
  panel.add(jmiExplain); 
  panel.add(jmiMessage); 
  JPanel p1 = new JPanel(new GridLayout(9, 9, 5, 5));  //定義9行9列的網(wǎng)格布局 
  add(panel,BorderLayout.NORTH);   //將菜單放置在北面 
  add(p1,BorderLayout.CENTER);   //將數(shù)字放置在正中間 
  rightans = Wk(right); 
  for(int k = 0;k<9; k ++) 
  { 
   for(int n=0;n<9;n++) 
   { 
    if(rightans[k][n] != 0) 
    { 
     a[k][n] = new JTextField("" + rightans[k][n]); 
     a[k][n].setHorizontalAlignment(JTextField.CENTER);//將數(shù)字水平居中 
     a[k][n].setEditable(false);   //只可顯示不可修改 
     p1.add(a[k][n]);     //添加文本框 
    } 
    else 
    { 
     a[k][n] = new JTextField();  
     a[k][n].setHorizontalAlignment(JTextField.CENTER); 
     p1.add(a[k][n]); 
    } 
   } 
  } 
  add(p1);   //將數(shù)字面板顯示在容器里 
  jmiOk.addActionListener(new ActionListener(){//匿名創(chuàng)建事件監(jiān)聽器 
   public void actionPerformed(ActionEvent e) 
   { 
    if(gettext() == 1) 
    { 
     if(judge() == true) 
     { 
      JOptionPane.showMessageDialog(null, "Your answer is right!","Result",JOptionPane.INFORMATION_MESSAGE); 
     } 
     else 
     { 
      JOptionPane.showMessageDialog(null, "Your answer is wrong!","Result",JOptionPane.INFORMATION_MESSAGE); 
     } 
    } 
   } 
  }); 
  explainListenerClass listener2 = new explainListenerClass(); 
  jmiExplain.addActionListener(listener2); 
  messageListenerClass listener3 = new messageListenerClass(); 
  jmiMessage.addActionListener(listener3); 
 } 
  
 static int gettext()   //獲取文本框的文字 
 { 
  int i,j; 
  for(i = 0; i < 9; i++) 
  { 
   for(j = 0; j < 9 ; j ++) 
   { 
    ans[i][j] = 0; 
   } 
  } 
  for(int k = 0;k < 9; k++) 
  { 
   for(int n = 0;n < 9; n++) 
   { 
    try   //異常處理 
    { 
     ans[k][n] = Integer.parseInt(a[k][n].getText());  
     //將答案類型轉(zhuǎn)換之后傳給ans 
    } 
    catch(NumberFormatException nfe) 
    { 
     JOptionPane.showMessageDialog(null,"數(shù)據(jù)中包括非數(shù)字,請重新輸入"); 
     return 0; 
    } 
   } 
  } 
  return 1; 
 } 
 public static boolean judge()   //判斷輸入的答案是否正確 
 { 
  int i,j,k; 
  int [][]answer = ans;    
   
  for(i = 0; i < 9; i ++) 
  { 
   if(judge9(answer[i]) == false)  //判斷每列是否有重復(fù)數(shù)字 
    return false; 
  } 
  for(j = 0; j < 9; j ++)     //判斷每行是否有重復(fù)數(shù)字 
  { 
    
   int[] newAnswerColumn = new int[9]; 
   for(i = 0; i < 9; i ++) 
   { 
    newAnswerColumn[i] = answer[i][j]; 
   } 
   if(judge9(newAnswerColumn) == false) 
    return false; 
  } 
  for(i = 0; i < 3; i ++)   //判斷每個小九宮格內(nèi)是否有重復(fù)數(shù)字 
  { 
   for(j = 0; j < 3; j ++) 
   { 
    k = 0; 
    int[] newAnswer = new int[9]; 
    for(int m = i * 3; m < i * 3 + 3; m ++) 
    { 
     for(int n = j * 3; n < j * 3 + 3; n ++) 
     { 
      newAnswer[k] = answer[m][n]; 
      k++; 
     } 
    } 
    if(judge9(newAnswer) == false) 
    { 
     return false; 
    }   
   } 
  } 
  return true; 
 } 
 public static boolean judge9(int[] answer) 
 { 
  int i,j; 
  for(i = 0; i < 9; i ++) 
  { 
   for(j = 0; j < 9; j ++) 
   { 
    if(i == j) 
     continue; 
    if(answer[i] == answer[j])  //如果有重復(fù)的數(shù)字,返回false 
    { 
     return false; 
    } 
   } 
  } 
  return true;  //沒有重復(fù)數(shù)字,返回true 
 } 
  
 public static void main(String[] args) { 
  JFrame frame = new ShuD(); 
  frame.setTitle("SuDoku"); 
  frame.setSize(600,900); 
  frame.setLocationRelativeTo(null);  
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  frame.setVisible(true); 
 } 
} 
class explainListenerClass implements ActionListener{  //事件監(jiān)聽器 
 public void actionPerformed(ActionEvent e){ 
  JOptionPane.showMessageDialog(null, "填入數(shù)字保證每行每列及每個小的九宮格內(nèi)數(shù)字無重復(fù)","Explain",JOptionPane.INFORMATION_MESSAGE); 
 } 
} 
class messageListenerClass implements ActionListener{ 
 public void actionPerformed(ActionEvent e){ 
  JOptionPane.showMessageDialog(null, "made by wyx","Message",JOptionPane.INFORMATION_MESSAGE); 
 } 
} 

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

相關(guān)文章

  • java非公平鎖知識點實例詳解

    java非公平鎖知識點實例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于java非公平鎖知識點實例詳解,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-10-10
  • Java實現(xiàn)四則混合運算代碼示例

    Java實現(xiàn)四則混合運算代碼示例

    這篇文章主要介紹了Java實現(xiàn)四則混合運算代碼示例,文中展示了詳細代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • JDK8中新增的原子性操作類LongAdder詳解

    JDK8中新增的原子性操作類LongAdder詳解

    這篇文章主要給大家介紹了關(guān)于JDK8中新增的原子性操作類LongAdder的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • springmvc流程圖以及配置解析

    springmvc流程圖以及配置解析

    這篇文章主要介紹了springmvc流程圖以及配置解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java 延遲隊列的常用的實現(xiàn)方式

    Java 延遲隊列的常用的實現(xiàn)方式

    這篇文章主要介紹了Java 延遲隊列的常用的實現(xiàn)方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • springboot使用Mybatis-plus分頁插件的案例詳解

    springboot使用Mybatis-plus分頁插件的案例詳解

    這篇文章主要介紹了springboot使用Mybatis-plus分頁插件的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java加載本地庫的方法之System.load與System.loadLibrary

    Java加載本地庫的方法之System.load與System.loadLibrary

    最近在做的工作要用到本地方法,所以下面這篇文章主要介紹了Java加載本地庫的方法之System.load與System.loadLibrary的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • spring的父子容器及配置詳解

    spring的父子容器及配置詳解

    本篇文章主要介紹了spring的父子容器及配置詳解,詳細的介紹了spring父子容器的概念、使用場景和用法,有興趣的可以了解一下
    2018-01-01
  • Java實現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    Java實現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    這篇文章主要為大家詳細介紹了Java調(diào)用ElasticSearch?API的效果資料,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的可以了解一下
    2023-03-03
  • Spring Boot日志收集及鏈路追蹤實現(xiàn)示例

    Spring Boot日志收集及鏈路追蹤實現(xiàn)示例

    這篇文章主要為大家介紹了Spring Boot日志收集及鏈路追蹤實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論