Я сделал небольшие изменения в вашем коде. Попробуйте это:
package stack;
import java.util.*;
public class Blackjack{
private int points;
private int limit;
private Scanner scan;
private boolean firstime = true; //new
boolean gameOver; //new
private String answer;//new
public Blackjack(){
scan = new Scanner(System.in);
}
/*Purpose: To print the current points and the limit.
Input: Points and Limit
Output: Points and Limit
*/
public void displayPoints(){
System.out.println("Your points:" + points+"/"+limit);
}
/*Purpose: To ask the user for the game limit.
Input: Game limit
Output: Entered limit
*/
public void startGame(){//Changes
if(firstime == true) {
System.out.println("Start Playing?");
answer = scan.next();
}
switch(answer) {
case "yes":
System.out.println("Enter point limit:");
limit = scan.nextInt();
int roll = getRoll();
points = points + roll;
displayResult();
break;
case "no":
goodBye();
}
}
//New method
public void goodBye() {
System.out.println("Goodbye!");
scan.close();
}
/*Purpose: To get the roll value from rolling a dice
Input: Nothing
Output: Random dice number
*/
public int getRoll(){
Random r = new Random();
int roll = r.nextInt(6)+1;
System.out.println("You rolled:" + roll);
return roll;
}
/* Purpose: to display the result of points in the game.
Input: No input.
Output: amount of points in the game.
*/
public void displayResult(){//Changes
if(points == limit) {
gameOver = true;
System.out.println("BlackJack!");
displayPoints();
System.out.println("Keep playing?");
answer = scan.next();
}
else if (points > limit) {
gameOver = true;
System.out.println("Bust!");
displayPoints();
System.out.println("Keep playing?");
answer = scan.next();
}
else if (points < limit) {
gameOver = false;
System.out.println("Stand at " + points + " points!");
}
}
/*Purpose: to play all methods
Input: none.
Output: Game results.
*/
public void play(){//Changes
startGame();
ENDWHILE:while(gameOver == true || gameOver == false) {
if(answer.equals("yes")) {
firstime = false;
while(gameOver == true) {
points = 0;
startGame();
}
while(gameOver == false) {
startGame();
}
}else {
break ENDWHILE;
}
}
goodBye();
}
public static void main(String [] args){
Blackjack practice = new Blackjack();
practice.play();
}
}
Одна вещь, которую можно сделать, состоит в том, чтобы вычислить энное питание Вас матрица A. Результат скажет Вам сколько путей там длины n от любой вершины до любого другого.
Теперь, если Вы интересуетесь знанием всех вершин вдоль пути, я не думаю, что использование чисто операций над матрицей является способом пойти. Принятие во внимание, что у Вас есть n-partite график, я настроил бы структуру данных следующим образом: (Примите во внимание, что затраты пространства будут дорогими для почти маленьких значений.)
Каждый столбец будет иметь одну запись каждого из узлов в нашем графике. Энный столбец будет содержать 1 в том, если этот узел будет достижим на энном повторении от нашей обозначенной вершины запуска, или запустите набор и обнулите иначе. Каждая запись столбца будет также содержать список обратных указателей к вершинам в n-1 столбце, который привел к этой вершине в энном столбце. (Это похоже на viterbi алгоритм, за исключением того, что мы должны вести список backpointers для каждой записи, а не всего один.) Сложность выполнения это (m^2) *n, где m является количеством вершин в графике, и n является длиной желаемого пути.
Я немного смущен Вашей главной матрицей: с undidrected графиком я ожидал бы, что матрица смежности будет симметрична.