2013-03-25 3 views
3

Im пытается реализовать метод, возвращающий логическое значение true или false. Метод инициализирует логическое isMatch для true или false на основе инструкции if и else.boolean method problem

public class BooleanTest { 
    int num; 
    boolean isMatch; 

    public BooleanTest() { 
    num = 10; 
    } 

    public boolean isMatch() { //variable is already initialize to 10 from constructor 
    if (num == 10) 
     isMatch = true; 
    else 
     isMatch = false; 
    return isMatch; 
    } 

    public static void main(String[] arg) { 
    BooleanTest s = new BooleanTest(); 

    System.out.println(s.isMatch); 
    } 
} 

Отпечаток isMatch должен быть правдой, но я получаю вывод isMatch false. Является ли мой логический метод неправильным и как я могу его исправить? Спасибо за помощь.

+1

Можете ли вы опубликовать, как вы называете этот метод в своем коде? –

+0

Покажите свой метод 'main()'. –

+0

Ваш код в порядке, проблема в другом месте. Можете ли вы опубликовать свой вызывающий класс и полный код BooleanTest? –

ответ

10

Во-первых, весь ваш isMatch метод будет лучше рухнул:

public boolean isMatch() { 
    return num == 10; 
} 

Во-вторых, существующий код действительно будет работать, если вы не изменяя значение num. Вы должны посмотреть, какая диагностика вы используете, чтобы показать результат как false ... Я подозреваю, что они вводят вас в заблуждение. Возможно ли, что вы выписываете значение поля , называемого isMatch, вместо вызова метода? Это объяснит это. Это одна из причин, почему это плохая идея иметь метод с тем же именем, что и поле. Кроме того, я бы рекомендовал сделать ваши поля частными.

Короткий, но полный пример, показывающий, как вызов метода работы и «не удалось» доступ к полям (работает нормально, но не делать то, что вы хотите):

public class BooleanTest { 
    private int num; 
    private boolean isMatch; 

    public BooleanTest() { 
     num = 10; 
    } 

    public boolean isMatch() { 
     return num == 10; 
    } 

    public static void main(String[] args) { 
     BooleanTest test = new BooleanTest(); 
     System.out.println(test.isMatch()); // true 
     System.out.println(test.isMatch); // false 
    } 
} 

Это не понятно, почему у вас есть поле на самом деле, честно говоря, я бы убрал его.

+0

Спасибо. это исправить мою проблему. – Phong

0

вы сделали что-то вроде этого:

public class BooleanTest { 
    int num; 
    boolean isMatch; 

    public BooleanTest() { 
    num = 10; 
    } 

    public boolean isMatch() { //variable is already initialize to 10 from constructor 
    if (num == 10) 
     isMatch = true; 
    else 
     isMatch = false; 
    return isMatch; 
    } 
    public static void main(String st[])//test your code in main.. 
    { 
     BooleanTest bt = new BooleanTest();//constructor of BooleanTest is called 
     System.out.println(bt.isMatch());//Check the value returned by isMatch() 
    } 
} 

EDIT
Отредактированный сообщение показывает, что в main вы печатаете isMatch вместо isMatch(), который false по умолчанию. .. Вместо этого вы должны использовать isMatch().

+0

Спасибо Vishal K. – Phong

0

Убедитесь, что при выполнении вы вызываете метод isMatch() с фигурной скобкой, иначе вы будете ссылаться на поле isMatch. Должно быть следующим:

BooleanTest bt = new BooleanTest(); 
bt.isMatch(); // include() and not bt.isMatch 

Изменить

System.out.println(s.isMatch); 

в

System.out.println(s.isMatch()); 
+0

Спасибо, тмваник. – Phong

1

вы должны назвать его как

b.isMatch() 

не нравится

b.isMatch 
+0

Спасибо, исправление. – Phong

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