2013-10-02 115 views
3

所以我想说让int Posx;拥有一个数字,然后当用户浏览一个菜单时,根据他们选择的内容,将添加1,0或-1到int Posx。我不能让Posx在添加或减去之后保留数字。我试图通过数组浏览,我想保留2个整数作为标记,让我知道我现在在数组中关于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,并尝试松多continue语句:

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

相关问题