2015-08-09 5 views
1

Я написал программу в java, которая сравнивает значения переменных буксировки, X и Y. , когда я вводил одно и то же число для X и Y в первой попытке цикла, говорит Матч и завершает работу. Но если он вернул «false» в первом цикле, а затем вернул «истину» в следующем, он не заканчивается и продолжает, как если бы «b» имеет значение «false».В то время как цикл не заканчивается

import java.util.Scanner; 
public class clads { 

    //Variables 
    public static int y; 
    public static int x; 
    static boolean b = mymethod() ; 


    //MainProcess 
    public static boolean mymethod() { 
     Scanner myscanner = new Scanner(System.in); 
     System.out.println("put a number for X"); 
     x = myscanner.nextInt(); 
     System.out.print("put a number for Y"); 
     y = myscanner.nextInt(); 
     if (y==x){ 
      System.out.println("match"); 
      return true; 
     }else{ 
      System.out.println("Mismatch, Redo"); 
      return false; 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     while(b ==false){ 
      mymethod(); 
     } 
    } 
} 

Но когда я добавил «Перерыв»; ключевое слово завершается всякий раз, когда оно возвращает «истинное» значение. Могу ли я получить объяснение, пожалуйста.

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    while(b ==false){ 
     mymethod(); 
     Break; 
    } 

ответ

3

При инициализации b по телефону mymethod, он установлен в любом true или false навсегда. Если это правда, вы не выполняете. Если это ложь, ваш цикл выполняется навсегда.

0

вы можете изменить код следующим ниже

public static void main(String[] args) { 
// TODO Auto-generated method stub 
while(b ==false){ 
    if (mymethod()) { 
     break; 
    } 
} 

если функция mymethod() возвращает истину, цикл while закончится, но когда функция возвращает ложь, то while будет продолжаться.

+0

этот работа спасибо. и я также нашел другой способ заставить его работать: \t do { \t mymethod(); \t} в то время как (b); \t} } , но я ищу объяснение о причине, которая держит его зацикливание! –

+0

Не задает значение b в main() или mymethod(). –

2

Ваша ошибка заключается в установке значения b при объявлении b. Вам вообще не нужно b. Просто поместите вызов MyMethod() внутри условия в то время:

import java.util.Scanner; 
public class clads { 

    //Variables 
    public static int y; 
    public static int x; 

    //MainProcess 
    public static boolean mymethod() { 
     Scanner myscanner = new Scanner(System.in); 
     System.out.println("put a number for X"); 
     x = myscanner.nextInt(); 
     System.out.print("put a number for Y"); 
     y = myscanner.nextInt(); 
     if (y==x){ 
      System.out.println("match"); 
      return true; 
     }else{ 
      System.out.println("Mismatch, Redo"); 
      return false; 
     } 
    } 

    public static void main(String[] args) { 
     while(!mymethod()); 
    } 
} 

Вы должны проверить возвращаемое значение MyMethod() каждый раз, когда она вызывается. Ваш исходный код только что поймал первое значение и использовал его навсегда.

+1

спасибо, что работает! –

+0

Я рад, что это сработало для вас. Если это хороший ответ, возможно, вы подумали бы «принять» его? –

1

Поскольку ваша переменная инициализируется один раз, а затем никогда не обновляется. попробуйте:

public static void main(String[] args) { 

    while(!b){ 
     b = mymethod(); 
    } 
} 
+0

спасибо, что работает тоже. я попытался поставить 'mymethod(); b = mymethode(); ' , но он сделал цикл еще один раунд после возвращения ложного значения. мне просто показалось, что просто положить ** b = mymethod(); ** гарантировать, что метод будет вызван без необходимости ** b = mymethode(); ** как в визуальном базовом. Мне просто нужно привыкнуть к java. –

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