2015-11-27 80 views
0

所以即使有問題拋光我的程序。這個程序應該創建一個帶有用戶輸入的1D數組。然後它創建的框「0'的這樣的..替換數組中的字符串並將其保存在內存中?

N = 4個

OOOO 
OOOO 
OOOO 
OOOO 

基於所述框和所述用戶輸入座標‘O’被改變爲‘X’。 在記住X的位置並將其包含在下一個循環中的情況下,程序應該在選擇座標之後自行重複。

我試圖執行一個while循環,但似乎代碼只是遍歷數組無需記住十的最後一個位置

我怎麼能更改代碼,以便它做什麼,我需要做什麼?

public static void makeArray(int M) { 
    String input = ""; 
    boolean repeat = false; 
    int N = InputNumber(input); 
    String[] Board = new String[N]; 
    M = (int) Math.sqrt(N); 
    String A = "O"; 
    String B = "X"; 

    System.out.println("Printing " + (M) + " x " + (M) + " board..."); 
    System.out.println("Done."); 
    System.out.println(); 

    while (!repeat) { 
     int X = Xvalue(M); 
     int Y = Yvalue(M); 

     int C = convertIndex(X, Y, M); 

     System.out.println("Marking location " + X + "," + Y + ")"); 
     for (int i = 0; i < (Board.length); i++) { 
      { 
       Board[i] = A; 
       if ((i % M == 0)) { 
        System.out.println(); 
       } 
       if (i == C) { 
        Board[i] = Board[i].replace(A, B); 
       } 
       if (i == C && C == -1) { 
        repeat = true; 
       } 
      } 
      System.out.print(Board[i]); 
     } 
     System.out.println(); 
    } 
} 

public static int convertIndex(int x, int y, int N) { 

    int valX = (x - 1) * N; 
    int valY = y; 
    int targetIndex = valX + valY; 

    return (targetIndex - 1); 

} 

public static int Xvalue(int M) { 
    boolean repeat = false; 
    int X = 0; 
    while (!repeat) { 

     System.out.print("Please enter the X-coordinate: "); 
     String InputX = new Scanner(System.in).nextLine(); 
     X = Integer.parseInt(InputX); 
     if (X > M) { 
      System.out.println(); 
      System.out.println("Error, please enter a valid X Coordinate..."); 
      repeat = false; 
     } else { 
      repeat = true; 
     } 
    } 
    return X; 
} 

public static int Yvalue(int M) { 
    boolean repeat = false; 
    int Y = 0; 

    while (!repeat) { 
     System.out.println(); 
     System.out.print("Please enter the Y-coordinate: "); 
     String InputY = new Scanner(System.in).nextLine(); 
     Y = Integer.parseInt(InputY); 
     if (Y > M) { 
      System.out.println("Error, please enter a valid Y Coordinate..."); 
      repeat = false; 
     } else { 
      repeat = true; 
     } 
    } 
    return Y; 
} 
+1

您是否嘗試過將其存儲在另一個變量? (這看起來像家庭作業) – Joe

+0

@Joe所以如果它的硬件呢?我沒有要求你爲我編寫程序。你也將它存儲在另一個變量中是什麼意思? – Ronald

+1

問題不在於它是作業,而在於你沒有提供一個簡單的例子,而是用整個程序給我們帶來負擔。這個問題不太可能對其他人有用。 – bhspencer

回答

1

與你循環的麻煩是,它定義了每個元素在你的陣列它打印在他們面前:

while (!repeat) { 
    //... 
    for (int i = 0; i < (Board.length); i++) { 
     { 
      Board[i] = A; //Makes each element "O" 
      //... 
      if (i == C) { //Makes only the current cooridinate "X" 
       Board[i] = Board[i].replace(A, B); 
      } 
      //... 
     } 
     System.out.print(Board[i]); 
    } 
} 

爲了讓老X的保留,你需要刪除分配Board[i] = A;修復。但是你仍然需要初始化你的板子,否則你會有空字符串。所以,你需要像循環之前添加一句:

String[] Board = new String[N]; 
M = (int) Math.sqrt(N); 
String A = "O"; 
String B = "X"; 
//initialize board 
for (int i = 0; i < Board.length; i++) 
    Board[i] = A; 
+0

我看到你在這裏說什麼,但我認爲String [] Board = new String []初始化板? – Ronald

+0

因此,*初始化*意味着「設置爲適合於操作開始的值」。當Java **初始化**一個字段時,它指的是提供默認值(例如「0」或「null」)的特定約定。但'null'字符串不適合你的循環。Java只是使用** initialize **這個詞來描述它自己特定的約定,並不是唯一的約定。 – Linus

0

嘗試使用char[][]代替String[]。然後您可以插入用戶輸入的座標(例如board[x][y] = B)。這更好地代表了您向用戶展示的內容。

這使您不必循環訪問String[],然後找到正確的角色進行更改。請記住,String s是不可變的,所以在替換正確的字符後,您必須重新分配整個字符串。使用char[][],您只需將'X'指定爲正確的座標。

編輯:

由於需要一個單一的陣列,你應該能夠做到以下幾點(而不是循環):

board[x] = board[x].substring(0, y) + A + board[x].substring(y + 1); 
+0

這個任務的目的是實際使用一維數組忘記提及我不允許使用二維數組。 – Ronald

相關問題