2016-12-03 42 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 ?我的课堂案例是为了代表董事会的一席之地,因为我不想在这个作业中使用更多的课程。 –

相关问题