private boolean solveWithHypothesys() throws SudokuException{
		System.out.println("");
		System.out.println("******* Nouvelle hypothèse ******");
		System.out.println("");
		Cell cellForHypothesys = null;
		int lastMinValue = matrix.getMatrixSize();
		for(int rowIndex=0; rowIndex < matrix.getMatrixSize(); rowIndex++){
			for(int colIndex=0; colIndex < matrix.getMatrixSize(); colIndex++){
				Cell cell = matrix.getCells()[rowIndex][colIndex];
				int numberOfPossibleValue = numberOfPossibleValues(cell);
				if(numberOfPossibleValue == 1){
					throw new SudokuException();
				}
				if(numberOfPossibleValue > 1 && numberOfPossibleValue <= lastMinValue){
					cellForHypothesys = cell;
					lastMinValue = numberOfPossibleValue;
				}
			}
		}

		int hypothesysValue = firstPossibleValue(cellForHypothesys);
		System.out.println("Nous allons faire une hypothèse sur la cellule (" + cellForHypothesys.getRowIndex() 
				+ "," + cellForHypothesys.getColIndex() + ") avec la valeur " 
				+ hypothesysValue
				);
		
		Matrix hypothesysMatrix = (Matrix) matrix.clone();
		Solver hypothesysSolver = new Solver(hypothesysMatrix);
		hypothesysSolver.setCellIsFound(hypothesysMatrix.getCells()[cellForHypothesys.getRowIndex()][cellForHypothesys.getColIndex()], hypothesysValue);
		boolean hypothesysSolved = false;
		try{
			hypothesysSolved = hypothesysSolver.solve();
		}
		catch(SudokuNoPossibleValueException noPossibleValueException){
			// hypothesysSolved reste à false
		}
		if(!hypothesysSolved){
			System.out.println("");
			System.out.println("******* Hypothèse non vérifiée :( ******");
			System.out.println("******* On supprime cette valeur possible et on recommence ! ******");
			System.out.println("");			
			//on définit à false la possibilité que cette valeur soit bonne
			cellForHypothesys.getPossibleValues()[hypothesysValue] = false;
		}
		else{
			System.out.println("");
			System.out.println("******* Hypothèse vérifiée ! ******");
			System.out.println("");					
			this.matrix = hypothesysMatrix;
		}
		return hypothesysSolved;
	}