2013-10-02 2 views
3

, поэтому я пытаюсь сказать int Posx; номер, а затем, когда пользователь перемещается по меню, в зависимости от того, что они выбрали, либо добавит 1, 0 или -1 к int Posx. Я не могу получить Posx, чтобы сохранить номер после его добавления или вычитания. Я пытаюсь перемещаться по массиву, и я хочу сохранить 2 ints в качестве маркеров, чтобы сообщить мне, где я нахожусь в массиве относительно x и y.Как я могу получить счетчик для работы в цикле while?

tl; dr Как я могу держать счетчик внутри цикла do/while?

Вот где проблема:

//this variable will hold if we found or not the string in the puzzle 
    boolean found = true; 

    do {  

     //Print out the array 
     for (int x = 0; x < maze.length; x++) { 
      for (int y = 0; y < maze[0].length; y++) { 
       System.out.print(maze[x][y]); 
      } 
      System.out.println(); 
     } 

     System.out.printf("You may:\n1) Move up\n2) Move down\n3) Move left\n4) Move right\n0) Quit\nYour Choice (0-4):\n"); 
     int usrAns = sc2.nextInt(); 

     if (usrAns == 0){ 
      System.out.println("Bye!\n"); 
      found = false; 
      break; 
     }   

     //arrays to hold the direction. 
     int[] movx ={ -1, 0, 0, 1}; 
     int[] movy ={ 0, -1, 1, 0}; 

     //Array to hold the position. 
     int Posx = 0; 
     int Posy = 0;  

     if (usrAns == 1){ 
      if(check(Posx, Posy, maze, movx[1], movy[1])){ 
        System.out.println("Cannot move past cave boundary! Try something else.\n"); 
        continue; 
       } 
       else{ 
        Posy = Posy - 1; 
        System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy); 
        continue; 
       } 
     } 
     if (usrAns == 2){ 
      if(check(Posx, Posy, maze, movx[2], movy[2])){ 
        System.out.println("Cannot move past cave boundary! Try something else.\n"); 
        continue; 
       } 
       else{ 
        Posy= Posy + 1; 
        System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy); 
        continue; 
       } 
     } 
     if (usrAns == 3){ 
      if(check(Posx, Posy, maze, movx[0], movy[0])){ 
        System.out.println("Cannot move past cave boundary! Try something else.\n"); 
        continue; 
       } 
       else{ 
        Posx = Posx - 1; 
        System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy); 
        continue; 
       } 
     } 
     if (usrAns == 4){ 
      if(check(Posx, Posy, maze, movx[3], movy[3])){ 
        System.out.println("Cannot move past cave boundary! Try something else.\n"); 
        continue; 
       } 
       else{ 
        Posx =Posx + 1; 
        System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy); 
        continue; 
       } 
     } 
     while (usrAns >= 5 || usrAns < 0){ 
      System.out.println("Please enter a number between 0 and 4:\n"); 
      usrAns = sc2.nextInt(); 
      if (usrAns == 0){ 
       System.out.println("Bye!\n"); 
       found = false; 
       break; 
      } 

     } 
    }while(found); 

Любые идеи, советы и приемы будут весьма благодарны.

ответ

5

Я думаю, что проблема заключается в этих двух строках

//Array to hold the position. 
    int Posx = 0; 
    int Posy = 0; 

Вы ПЕРЕЗАГРУЗКА PosX и Пози каждой итерации. Попробуйте установить их вне цикла while. Например (вы не хотите их инициализировать снова и снова). То же самое для MOVX и movy:

//arrays to hold the direction. 
int[] movx ={ -1, 0, 0, 1}; 
int[] movy ={ 0, -1, 1, 0}; 

//Array to hold the position. 
int Posx = 0; 
int Posy = 0;  

do { 
    //Print out the array 
    for (int x = 0; x < maze.length; x++) { 
    ... 
    ... 

Для улучшения читаемости коды можно проверить на switch statement и попытаться освободить множественные продолжать заявление:

switch(usrAns) { 
     case 1: 
      if(check(Posx, Posy, maze, movx[1], movy[1])){ 
       System.out.println("Cannot move past cave boundary! Try something else.\n"); 
      } 
      else{ 
       Posy = Posy - 1; 
       System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy); 
      } 
      break; 
     case 2: 
     ... 
     ... 
     default: 
      while (usrAns >= 5 || usrAns < 0){ 
       System.out.println("Please enter a number between 0 and 4:\n"); 
       usrAns = sc2.nextInt(); 
       if (usrAns == 0){ 
        System.out.println("Bye!\n"); 
        found = false; 
        break; 
       } 
      } 
      break; 
     } 
+1

Мало того, что нам не нужно инициализировать Posx и Posy внутри цикла, мы не хотим, так как он сбрасывает наше положение каждый раз, когда цикл поворачивается. – 3yakuya

+0

@Byakuya спасибо, отредактировал мое сообщение ;-) –

+0

Спасибо! Не могу поверить, что это было так просто ... – Drieke

Смежные вопросы