2013-10-11 1 views
0

Я новичок в Java и столкнулся с программой с циклом «while», у которого было условие, являющееся ссылкой/вызовом объекта. Я тщательно отслеживал код и не видел никаких условий завершения для объекта (было бы разумно, если бы объект в условии while while имел условие завершения, вызванное реализацией цикла while.Как вы используете ссылку на объект как условие цикла while в Java?

ПРИМЕЧАНИЕ: это включает в себя «внутренние»/«вложенные» классы, поэтому я даже не совсем уверен, что именно по этой причине это работает. Каким образом цикл может быть удовлетворен этим синтаксисом? Я попытаюсь сформулировать свой вопрос ниже псевдокод:

class DemoClass { 

    demoClassfoo() { 

     InnerClassdemo object2 = this.new InnerDemoClass; 

     // Here is where my confusion is. I always thought that the 
     // while loop had to terminate with a logical statement being 
     // satisfied: like it is calling an object? 

     while(object2.innerClassfoo()) { 

      IMPLEMENTATIONS;    
     }         
    }          

    class InnerDemoClass {    

     innerDemoClassfoo() { 

      IMPLEMENTATION; 
     } 
    } 

    public static void main(String[] args) { 

     DemoClass object = new DemoClass(); 

    } 
} 
+1

Он вызывает метод, возвращающий значение типа 'boolean'. –

+1

Учебное пособие объясняет это довольно хорошо: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html – iamnotmaynard

+0

Сотириос, мне стыдно признаться в моей «нужности», но я фактически не делал этого соединения что условные логические операторы, которые обычно являются условием «while», оцениваются в значение Boolean True/False. Когда я увидел петлю, единственное, что приходит мне на ум, - «обязательно и посчитайте это, так что цикл закончится!». Но я не думал просто возвращать значение Boolean для этого. Это очень облегчило эту путаницу. Учебник также был полезен iamnotmaynard. Спасибо за вашу помощь! –

ответ

8

Это работает так как метод innerClassfoo возвращает значение boolean, таким образом, удовлетворяющим условию while. Кстати, код должен выглядеть так:

class InnerDemoClass{    

    boolean innerDemoClassfoo(){ 
     //implementation goes here 
     //make sure to ALWAYS return the value 
     boolean result = ... 
     return result; 
    } 
} 
+0

Интересно, как он не вернул бы какую-либо ценность в этой ситуации, поскольку ее примитивный логический, а не булевский? ;-) тем не менее +1 –