2016-04-16 10 views
1

der Spiel Teil meines Puzzles nichts zurückgibt, habe ich ähnlichen Code in anderen Bereichen, die arbeiten. Ich bekomme keine Fehler, daher weiß ich nicht, was falsch ist. Ich habe versucht, '==' zu verwenden und das Puzzle separat auszugeben, aber es passiert wieder nichts. jede Hilfe wäre nützlich. Das Puzzle sollte auch eine Schleife verwenden und das Spiel sollte enden, wenn das Puzzle gelöst ist, aber ich bin mir nicht sicher, was ich als Vorher und Nachher verwenden soll, jede Hilfe hier wäre auch nützlich."Play" Teil meines Puzzles nichts zurück

package assignment; 

import java.util.Scanner; 

import static java.util.Scanner.*; 


public class puzzle { 

    public static final int N = 4; 
    public static final int NUMBER_OF_ROTATIONS = 5; 

    public static void main(String[] args) { 
     int[][] puzzle = new int[N][N]; 
     reset(puzzle); 
     test(puzzle); 
     reset(puzzle); 
     scramble(puzzle); 
     System.out.println("### Testing puzzle game play\n"); 
     play(puzzle); 
    } 

    public static void print(int[][] puzzle) { 
     for (int[] row : puzzle) { 
      for (int elem : row) { 
       System.out.printf("%4d", elem); 
      } 
      System.out.println(); 
     } 
     System.out.println(); 
    } 

    public static void test(int[][] puzzle) { 
     System.out.println("### Testing reset method\n"); 
     print(puzzle); 
     System.out.println("### Testing rotate methods\n"); 
     print(puzzle); 
     for (int i = 0; i < N; i++) { 
      System.out.println("### rotateColumn(" + i + ")\n"); 
      rotateColumn(puzzle, i); 
      print(puzzle); 
      System.out.println("### rotateRow(" + i + ")\n"); 
      rotateRow(puzzle, i); 
      print(puzzle); 
     } 
     reset(puzzle); 
     System.out.println("### Testing random rotations\n"); 
     print(puzzle); 
     for (int i = 0; i < 5; i++) { 
      randomRotation(puzzle); 
      print(puzzle); 
     } 
    } 

    public static void reset(int[][] puzzle) { 
     for (int i = 0; i < N; i++) { 
      for (int j = 0; j < N; j++) 
       puzzle[i][j] = i * N + j; 
     } 
    } 

    public static void scramble(int[][] puzzle) { 
     for (int i = 0; i < NUMBER_OF_ROTATIONS; i++) { 
      randomRotation(puzzle); 
     } 
    } 


    // TODO: Implement method as specified in assignment brief 

    public static void rotateRow(int[][] arr, int row) { 

     int newRow = arr[row][arr.length - 1]; 
     int nextRow; 
     for (int IndexNo = 0; IndexNo < arr.length; IndexNo++) { 
      nextRow = arr[row][IndexNo]; 
      arr[row][IndexNo] = newRow; 
      newRow = nextRow; 
     } 

    } 


    // TODO: Implement method as specified in assignment brief 

    public static void rotateColumn(int[][] arr, int column) { 
     int newCol = arr[arr.length - 1][column]; 
     int nextCol; 
     for (int IndexNo = 0; IndexNo < arr.length; IndexNo++) { 
      nextCol = arr[IndexNo][column]; 
      arr[IndexNo][column] = newCol; 
      newCol = nextCol; 
     } 
    } 


    // TODO: Implement method as specified in assignment brief 

    public static void randomRotation(int[][] puzzle) { 

     int rowrandom = (int) (Math.random() * 3 + 1); 
     int colrandom = (int) (Math.random() * 3 + 1); 
     int option = (int) (Math.random() * 2 + 1); 

     if (option == 1) { 
      rotateRow(puzzle, rowrandom); 
     } else { 
      rotateColumn(puzzle, colrandom); 
     } 

    } 

    // TODO: Implement method as specified in assignment brief 

    static void play(int[][] puzzle) { 
     reset(puzzle); 
     print(puzzle); 

     for (int i = 0; i < 5; i++) { 
      randomRotation(puzzle); 
     } 
     print(puzzle); 


     System.out.println("enter row x or col x: "); 
     Scanner input = new Scanner(System.in); 
     String x = input.next(); 

     if (x.equals("row 0")){ 
      rotateRow(puzzle, 0); 
      print (puzzle); 

     } 
     if (x.equals("row 1")){ 
      rotateRow(puzzle, 1); 
      print(puzzle); 

     } 
     if (x.equals("row 2")){ 
      rotateRow(puzzle, 2); 
      print(puzzle); 

     } 
     if (x.equals("row 3")){ 
      rotateRow(puzzle, 3); 
      print(puzzle); 

     } 
     if (x.equals("col 0")){ 
      rotateColumn(puzzle, 0); 
      print(puzzle); 

     } 
     if (x.equals("col 1")){ 
      rotateColumn(puzzle, 1); 
      print(puzzle); 

     } 
     if (x.equals("col 2")){ 
      rotateColumn(puzzle, 2); 
      print(puzzle); 

     } 
     if (x.equals("col 3")){ 
      rotateColumn(puzzle, 3); 
      print(puzzle); 

     } 




    } 
} 
+0

verwenden. Wenn Sie etwas zurücksenden, beziehen Sie sich auf einen tatsächlichen Rückgabewert, oder suchen Sie nach einer Druckanweisung, die ich ablehne, weil void hat keinen Rückgabetyp und wird nichts zurückgeben. – Afflicted

+0

die Methode war eine Vorlage, die uns gegeben wurde, also können wir es nicht ändern, also glaube ich nicht, dass wir tatsächlich die Rückgabe verwenden, ich möchte nur, dass das Puzzle ausgegeben wird – sb33

Antwort

2

In Bezug auf das Puzzle nichts zeigt, ein Scanner liest nur das erste Wort, wenn Sie die input.next() Methode verwenden. Um Text mit einem Leerzeichen (zB "Zeile 1") zu lesen, müssen Sie input.nextLine()

1

Ihre play-Methode nicht alles zurück, weil es void deklariert wird, und in der Tat haben Sie nicht einmal eine return-Anweisung.

Sie sollten die Methode als erklären:

static int[][] play(int[][] puzzle) { 
    ... 
    return puzzle; 
} 
+0

die Methode war Teil einer Codevorlage, also ich glaube nicht, dass ich es ändern kann – sb33

+0

@ Cyb3rFly3r Ich glaube, die OP war einfach verwirrt über die Rückgabe etwas, da er eine Funktion speziell für das Drucken hat in diesem Fall ist es sinnlos, zu int und zurück zu ändern. Auch das Problem ist in Ihrer print-Anweisung, versuchen Sie mit einem Standard-for-Schleife anstelle von a für jedes, auch den Index in Ihrer for-Schleife loswerden – Afflicted