2016-12-03 76 views
0

我有作業要完成,但我不知道如何處理它,我的老師whant我使用ArrayList,但我們沒有學習如何使用它......所以需要幫助。Java - 保存10個數獨移動到一個ArrayList中,然後將最後一個移動2刪除

這裏是我的代碼 對不起,在法國的代碼中留言。 那麼我的程序做:

  1. 說歡迎
  2. 要求用戶選擇難度級別,然後打印數獨
  3. 驗證是否在數獨的價值是對還是錯,並打印一條消息
  4. 這裏啓動問題;我必須設置10板[] []的值(該方法必須在類案例(最後一個)
  5. 我也必須保存這10個值(不僅是值,但我在哪裏使用它的我必須使用一個ArrayList來做
  6. 取消2這些步驟,我的意思是,我認爲放置10個值,我必須取消其中的2個才能返回原來的值board [x ] [y] = 0

所以對我來說問題真的是ArrayList。要設置一個值,我只做了一個,但我可以做10次,除非你有一個Idea,它可以是隨機值或設置值或詢問用戶在我的課程案例中,我假設要創建對象以保存電路板[x] [y] = z(電路板上的位置和新值)

感謝

import java.util.BitSet; 
import java.util.ArrayList; 
import java.util.Scanner; 

// Classe principale pour faire démarrer le logiciel. 
public class TN4 { 


public static void main(String[] args) { 
    System.out.println("Bienvenue dans le sudoku de l'ecole Saint-Pruneau."); 
    // Initialisation de la fonction pour Imprimer la grille 
    Sudoku9x9 IGrille = new Sudoku9x9(); 
    String N1; 
    //Declaration de la variable contenant le niveau de difficulté en appelant la methode permettant a l'utilisateur de choisir son niveau de jeu 
    N1 = IGrille.Difficulte(); 
    IGrille.setNiveau(N1); 
    N1 = IGrille.getNiveau(); 


    //appel de la grille originale 
    IGrille.GrilleOriginale(N1); 

    //Affichage de la grille 
    IGrille.Grille(); 
    //Validation de la grille 
    boolean Vali = IGrille.validate(); 
    if (Vali == true){ 
     System.out.println("Les placement sont valide"); 
    } 
    else { 
     System.out.println("Les placements ne sont pas valide, veuillez essayer de nouveau"); 
    } 

    //System.out.println(Vali); 
    Sudoku9x9 Test = new Sudoku9x9(); 

    Case Placement = new Case(); 
    Placement.fairePlacement(); 
    IGrille.Grille(); 
} 

} 
class Sudoku9x9 extends Sudoku { 
//Declaration du scanner pour les données a entrées par l'utilisateur 
static Scanner sc = new Scanner(System.in); 

public void setBoard(int x, int y, int value) { 
    board[x][y] = value; 

} 







//Declaration des valeur de chaque case pour la grille originale selon le niveau de difficulte choisi. 
public void GrilleOriginale(String N){ 
    if (N == "facile"){ 
    System.out.println("Voici la grille initiale de niveau " + N + " : "); 

    board = new int[][] 
      {{0,0,4,8,0,6,9,1,7}, 
      {0,0,0,1,4,9,2,0,5}, 
      {1,0,9,5,0,7,4,0,8}, 
      {4,3,6,7,9,0,0,2,1}, 
      {0,0,2,4,6,1,0,9,3}, 
      {9,1,0,2,0,3,0,4,6}, 
      {2,8,1,6,7,4,3,5,9}, 
      {7,9,5,3,1,2,6,8,4}, 
      {6,4,3,9,0,0,1,7,2}}; 
    } 
    if (N == "intermediaire") { 
     System.out.println("Voici la grille initiale de niveau " + N + " : "); 
     board = new int[][] 
      {{0,0,4,8,0,6,9,1,0}, 
      {0,0,0,1,4,0,2,0,5}, 
      {1,0,0,5,0,7,4,0,8}, 
      {4,3,6,7,0,0,0,2,1}, 
      {0,0,2,0,6,1,0,9,3}, 
      {9,0,0,2,0,3,0,4,6}, 
      {2,8,1,6,7,4,3,5,9}, 
      {0,9,0,3,1,2,6,8,4}, 
      {6,0,3,9,0,0,1,0,2}}; 

    } 
    if (N == "difficile") { 
     System.out.println("Voici la grille initiale de niveau " + N + " : "); 
     board = new int[][] 
      {{0,0,4,8,0,6,9,1,0}, 
      {0,0,0,1,4,0,0,0,5}, 
      {1,0,0,5,0,0,4,0,8}, 
      {4,0,6,0,0,0,0,2,1}, 
      {0,0,2,0,6,1,0,9,3}, 
      {9,0,0,0,0,3,0,4,6}, 
      {2,0,1,0,7,0,0,5,9}, 
      {0,9,0,3,1,2,0,8,4}, 
      {6,0,3,9,0,0,1,0,2}};   
    } 
} 

//Methode permettant à l'usager de choisir son niveau de difficulté et retournant celui-ci 
public String Difficulte(){ 
    System.out.println("Veuillez choisir votre niveau de jeu:\n1 = Facile\n2 = Intermediaire\n3 = Difficile"); 
    int nombre = 0; 
    String Niveau = ""; 

     nombre = sc.nextInt(); 
     while (nombre < 1 || nombre > 3){ 
      System.out.println("Vous devez choisir un nombre entre 1 et 3, essayez de nouveau:\n"); 
      nombre = sc.nextInt(); 
     } 


    if (nombre == 1){ 
     Niveau = "facile"; 
    } 
    if (nombre == 2){ 
     Niveau = "intermediaire"; 
    } 
    if (nombre == 3){ 
     Niveau = "difficile"; 
    } 
    System.out.println("Vous avez choisi le niveau " + Niveau + ".\n"); 
    return Niveau; 
} 
} 

abstract class Sudoku { 
    public String Bonjour = "Variable bonjour de la methode bark"; 
    private String Niveau; 
    static int[][] board = new int[9][9]; 

    //Setter pour le Niveau de jeu 
    public void setNiveau(String c) { 
     this.Niveau = c; 
    } 


    //Getter pour le niveau de jeu 
    public String getNiveau() { 
     return Niveau; 
    } 

    public abstract String Difficulte(); 

    // Methode Grille est concu pour afficher toutes les valeur de notre sudoku, et si "0" la case est vide et on affiche "." 
    public void Grille() { 
     for (int i = 0; i < 9; i++) { 
       System.out.print("\n"); 
       if(i%3==0) 
        System.out.print("\n"); 
      for (int j = 0; j < 9; j++) { 
       if (j % 3 == 0) 
        System.out.print(" "); 
       if (board[i][j] == 0) 
        System.out.print(". "); 
       if (board[i][j] == 1) 
        System.out.print("1 "); 
       if (board[i][j] == 2) 
        System.out.print("2 "); 
       if (board[i][j] == 3) 
        System.out.print("3 "); 
       if (board[i][j] == 4) 
        System.out.print("4 "); 
       if (board[i][j] == 5) 
        System.out.print("5 "); 
       if (board[i][j] == 6) 
        System.out.print("6 "); 
       if (board[i][j] == 7) 
        System.out.print("7 "); 
       if (board[i][j] == 8) 
        System.out.print("8 "); 
       if (board[i][j] == 9) 
        System.out.print("9 "); 
      } 
     } 
     System.out.print("\n"); 
    } 


    //Fonction fourni par le cour pour valider les case du sudoku 
    public boolean validate() { 
     // un tableau : int[][] board = new int[9][9](); 
     // initialisation et actions sur le Sudoku 
     //int[][] board = new int[9][9]; 

     //Vérifie les lignes et les colonnes 
     for (int i = 0; i < board.length; i++) { 
     BitSet bsRow = new BitSet(9); 
     BitSet bsColumn = new BitSet(9); 
     for (int j = 0; j < board[i].length; j++) { 
     if (board[i][j] == 0 || board[j][i] == 0) continue; 
     if (bsRow.get(board[i][j] - 1) || bsColumn.get(board[j][i] - 1)) 
     return false; 
     else { 
     bsRow.set(board[i][j] - 1); 
     bsColumn.set(board[j][i] - 1); 
     } 
     } 
     } 

    //Vérifie les quandrans (3x3) 
    for (int rowOffset = 0; rowOffset < 9; rowOffset += 3) { 
    for (int columnOffset = 0; columnOffset < 9; columnOffset += 3) { 
    BitSet threeByThree = new BitSet(9); 
    for (int i = rowOffset; i < rowOffset + 3; i++) { 
    for (int j = columnOffset; j < columnOffset + 3; j++) { 
    if (board[i][j] == 0) continue; 
    if (threeByThree.get(board[i][j] - 1)) 
    return false; 
    else 
    threeByThree.set(board[i][j] - 1); 
    } 
    } 
    } 
    } 
    return true; 
    } 

} 

class Case { 
    int Line; 
    int Row; 
    int Value; 
    ArrayList Placement = new ArrayList(); 
    Sudoku9x9 Placer = new Sudoku9x9(); 
    public void fairePlacement() { 
     Placer.setBoard(0, 0, 1); 

    } 
} 
+1

歡迎來到Stack Overflow。我們很樂意幫助您學習編程。請告訴我們一些你已經嘗試過的東西,並問一個具體的問題是什麼部分給你帶來麻煩。許多人會很高興地解釋當你問一個詳細而精確的問題時你需要知道什麼。祝你好運! –

+0

定義「無效移動」。如上所述,我們需要一個更具體,明確,明確的問題。 – qxz

+0

要開始,您應該解釋如何確定步驟1中需要的10個值。您從哪裏獲得這些值? –

回答

0
  1. 創建的<x, y>雙一個堆棧來存儲您做出舉動。
  2. 對於每一步你推動當前移動到堆棧。
  3. 從彈出堆棧頂部的項目,並設置板[X] [Y] =每次你需要恢復的最後一步,在你的,你應該到這種特殊情況下的兩倍時間0

重複步驟3 。

您也可以考慮創建一個自定義類Pair來表示棋盤上的某個位置。

+0

如何創建堆棧? ArrayList ?我的課堂案例是爲了代表董事會的一席之地,因爲我不想在這個作業中使用更多的課程。 –

相關問題