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:
Satır döndürerek ne demek istediğinizi göstermek için örnek bir girdi çıkışı verebilir misiniz? – nhouser9
Soruyu bir saniye sonra güncelleyeceğim :). – Leonardo