2016-04-08 10 views
1

Temel olarak 4x4 tam sayı dizisi olarak gösterilen bir 2D bulmacam var.0-15 arası tamsayılarla başlatılan bir 4x4 dizisinin belirtilen sırasını döndürme yöntemi?

public static void play(int[][] puzzle) 

yöntemi, argüman olarak bu şifreli edildikten sonra bulmaca temsil eden bir 4x4 tamsayı dizisi almalıdır: Dizi Ben yöntemini uygulamak zorunda 0..15 tamsayılar ile başlatılır. Yöntem, yinelenen bir döngü kullanılarak uygulanmalıdır: 1. Bulmacanın geçerli durumunu işaretler 2.Aracın bir döndürme komutu girmesini söyler 3.Karşılaştırıcı tarafından istenen dönüşü gerçekleştirir Bulmaca yaptıktan sonra döngü sonlandırılmalıdır orijinal şifrelenmemiş haliyle geri döndüğünden, 0 ile 15 arasındaki rakamlara göre orijinal Puzzle'a geri dönmesi gerektiği anlamına gelir.

Program, bu olduğunda bir tebrik mesajı göstermelidir.

Program, kullanıcı giriş doğrulamasını içermelidir.

Kullanıcı girişi geçersiz olduğunda, program uyarıyı yazdırmalıdır Geçersiz giriş! Kullanıcı girişi, iki komut satırından veya sütun dönüşünden biri biçiminde ise geçerlidir.

Puzzle şablondur: Gördüğünüz gibi, ben satır yöntemi dönen ama bunu çalıştırdıktan sonra, tüm dizi yerine belirli bir sıranın değişmiş olur uygulamaya çalıştık

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); 
     } 
    } 




    public static void rotateRow(int[][] arr, int row) { 
     for (int i= arr.length-1; i>0; i--) { 
      int r= (int) (Math.random() * (i+1)); int[] c = arr[i]; 
      arr [i] = arr[r]; 
      arr[r] = c; 
     } 


    } 


    // TODO: Implement method as specified in assignment brief 

    public static void rotateColumn(int[][] arr, int column) { 
    } 


    // TODO: Implement method as specified in assignment brief 

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

    // TODO: Implement method as specified in assignment brief 

    static void play(int[][] puzzle) { 
    } 

} 

. Birisi bana neyi yanlış yaptığımı gösterebilir mi? Teşekkür ederim :).

public static void rotateRow(int[][] arr, int row) { 
     int newCurrent = arr[row][arr.length - 1]; 
     int nextCurrent; 
     for (int currentIndex = 0; currentIndex < arr.length; currentIndex++) { 
      nextCurrent = arr[row][currentIndex]; 
      arr[row][currentIndex] = newCurrent; 
      newCurrent = nextCurrent; 
     } 
    } 

Ben bunu test ve bildiğim kadarıyla söyleyebilirim gibi büyük çalışır:

+0

Satır döndürerek ne demek istediğinizi göstermek için örnek bir girdi çıkışı verebilir misiniz? – nhouser9

+0

Soruyu bir saniye sonra güncelleyeceğim :). – Leonardo

cevap

0

bu deneyin.

+0

Çok çalıştığınız için teşekkür ederim: D. Sanırım bunu da Sütun rotasyonları üzerinde çalışmak için kullanabilir miyim? – Leonardo

+0

@Leonardo Evet sadece endeks değişkenlerinizle biraz oynamanız gerekecek, ancak sütun dönüşü yapmak için kolayca değiştirilmelidir. Cevabım size yardım ettiğinden, onu desteklediyseniz ya da bir çözüm olarak işaretlediyseniz harika olur, böylece bunun için itibar alabilirim. – nhouser9

İlgili konular