2014-09-13 2 views
-6

Я кодирую в JAVA, и я пытаюсь понять, как закончить while, используя простой метод, который я пытаюсь использовать для расширенных кодов. Для того, чтобы проверить, если он работает, я сделал этот код:.Как закончить цикл while в Java

package files; 

public class EndLoopWithBooleanMethod { 
    static boolean a = true; 
    public static void main(String[] args){ 

     while(a = true){ 
      EndLoop(a); 
      System.out.print("."); 
      EndLoop(a); 
     } 
    } 

    public static boolean EndLoop(boolean b){ 
     return false; 
    } 

} 

Когда я создаю его, он просто будет держать на напечатав даже хотя она должна возвращать ложь и конец цикла, я попытался изменяя

static boolean a = true; 

в

static boolean a; 

но не вижу никакой разницы.

Я знаю, что вы можете закончить цикл с break; но я не пытаюсь это сделать, потому что я могу использовать методы для эффективного завершения циклов в другом контексте. Пожалуйста, исправьте меня, показывая мои оригинальные строки кода, а затем показывая мне фиксированный, это помогает мне понять больше (объясните это тоже).

EDIT: ANSWER SOLVED, САМОЕ ЛЮДЬ ИМЕЛО ИМЯ/ИСПРАВЛЯЕМЫЙ ОТВЕТ: НУЖНО ДЛЯ БОЛЬШЕ ОТВЕТОВ!

+2

Что вы думаете, 'return' заявление делает? В чем разница между '=' и '=='? –

ответ

0

вы не измените значение а (что верно по умолчанию) ложь, вы просто называете метод, который вернет false, но n othing установлено на это возвращаемое значение.

Измените код следующим образом:

package files; 

public class EndLoopWithBooleanMethod { 
static boolean a = true; 
public static void main(String[] args){ 

    while(a) { //This is enough as a is a boolean, the complete thing would be 
        //whlie (a == true) 
     EndLoop(a); 
     System.out.print("."); 
     EndLoop(a); 
    } 
} 

public static void EndLoop(boolean var){ 
    var = false; //a is set to false instead of the method returning false 
} 
} 
+0

Это также помогает моей проблеме в полном коде, спасибо! – jiggumbob

0

Ваша проблема в том, что while(a = true) не является оператором сравнения. Вы должны изменить его на while(a == true).

Имея a = true комплектов a, равный true. То, что вы на самом деле имеете в виду, «если (a равно true)», которое равно a == true. (Поскольку это логическое, вы можете просто уплотнить его while(a))

Так что для вас:

while(a){ 
     EndLoop(a); 
     System.out.print("."); 
     EndLoop(a); 
    } 
1

Присвоить возвращаемое значение метода boolean a

Попробуйте это:

while(a == true){ 
     a=EndLoop(a); 
     System.out.print("."); 
     a= EndLoop(a); 
    } 

a=true присваивает значение a true, даже если вы возвращаете false. Вместо того, чтобы использовать a==true

0

Попробуйте это:

package files; 

public class EndLoopWithBooleanMethod { 
    static boolean[] a = new boolean[1]; 
    public static void main(String[] args){ 

     while(a[0] == false){ 
      EndLoop(a); 
      System.out.print("."); 
      EndLoop(a); 
     } 
    } 

    public static void EndLoop(boolean[] b){ 
     b[0] = true; 
    } 
} 

Проблема заключается в том, что аргументы передаются по значению, так что если вы хотите изменить их, вы можете сделать выше трюк - создать ссылку на них, поместив их в массиве, поэтому сама ссылка массива не изменится, просто значение, которое оно содержит.

1

Первая проблема: while(a = true) всегда верна. Вы должны использовать сравнение: while(a == true) и потому, что a является логическим, вы должны написать как:

while(a) 

Вторым вопрос: EndLoop ничего не делает. Параметр кажется бесполезным, поскольку Java не проходит по ссылке. Возвращаемое значение бесполезно, если вы не сделаете что-то со значением.Я думаю, вы хотите что-то вроде этого:

public static void endLoop(){ 
    a = false; 
} 
+0

Спасибо, это должно устранить проблему. – jiggumbob

0

Вы путаете некоторые вещи:

  • Вы не Проверяется a является true, но установка его. Используйте один знак равенства (=) для присвоения значения переменной и оператор двойного равенства (==) для сравнения.

    while (a = true) должен быть while (a == true) или просто while (a)

  • В методе EndLoop(boolean a), вы принимаете один параметр, но ничего с параметром не делать. Вы просто возвращаете false, оставляя аргумент a неиспользованным.

    Вы должны написать что-то вроде этого:

    static boolean a = true; 
    
    public static void main(String[] args) { 
        while (a == true) { // Or "while (a)", which is the same 
         System.out.print("."); 
         a = endLoop(); 
         // a will be false 
         // and there will be no next iteration of the while loop, 
         // because a is not true anymore 
        } 
    } 
    
    public static boolean endLoop(/* We don't need arguments here */) { 
        return false; 
    } 
    

Могу ли я также сделать несколько предложений:

  • Вы должны начать имя метода со строчной буквы, см присвоению имен Java Условные обозначения.
  • Вызов метода endLoop(), где вы только возвращаете false, бесполезно, вы должны использовать break в цикле while. Если вы хотите расширить метод endLoop() с некоторой проверкой переменных, вы должны переименовать endLoop.
0

The while петли, как и любой другой условный цикл в Java принимает значение boolean как условие, так что вы можете передать просто ваш a булевых примитивно:

while(a){ 
    EndLoop(a); //This will reassign the a primitive with a false literal 
    System.out.print("."); 
} 

То, что вы фактически делаете, является reassinging true буквально к переменной a, и проверять ее, так что это будет верно навсегда, и вы закончите бесконечный цикл.

Второй случай, чтобы проверить, является вашим EndLoop метода (обратите внимание на метод именование, первое письмо должно быть в нижнем регистре), которые должны быть обновлено либо принимает аргумент обновленной информации его значение:

public static boolean endLoop(boolean b){ 
    b = false; //It will update the a value when it is passed as an argument 
} 

Или просто не проходят в каких-либо аргументов и изменить a буквенное значение, так как это экземпляр класса:

public static boolean endLoop(){ 
    a = false; 
} 
Смежные вопросы