2013-09-21 5 views
0

Принимая свой первый класс Java, и я застрял на глупые. Я делаю проект палиндрома. Эта логика кажется хорошей. В любом случае отображается True. Что я делаю не так?Java домашнее задание. Проблема с булева логика

вызов:

boolean result = check(input); 

или в самом методе:

public static void display(boolean result, String palindrome) 
{ 
    if (result = true) 
    { 
     JOptionPane.showMessageDialog(null, palindrome 
       + " is a palindrome."); 
    } else 
     JOptionPane.showMessageDialog(null, palindrome 
       + " is not a palindrome."); 

} 

Вот весь код: импорт javax.swing.JOptionPane;

public class Palindrome 
{ 

public static void main(String args[]) 

{ 
    // declare variables 

    // call methods 
    String input = retrieveInput(); 
    boolean result = check(input); 
    display(result = false, input); 
    finish(); 
} 

// Accepts and validates input 
public static String retrieveInput() 
{ 
    // declare variables 
    int length; 
    String palindrome = null; 
    boolean done = false; 
    while (!done) 
    { 
     try 
     { 
      // user input 
      palindrome = JOptionPane.showInputDialog(null, 
        "Please enter a 5 digit integer:"); 
      length = palindrome.length(); 

      // data validation 
      if (length != 5) 
      { 
       throw new NumberFormatException(); 
      } else 
       done = true; 
     } 

     catch (NumberFormatException e) 
     { 
      JOptionPane.showMessageDialog(null, 
        "Error. Please enter a 5 digit integer", "Error", 
        JOptionPane.INFORMATION_MESSAGE); 
     } 
    } 
    return palindrome; 
} 

public static Boolean check(String palindrome) 
{ 
    // determine if palindrome 

    int left = 0; 
    int right = palindrome.length() - 1; 

    while (left < right) 
    { 
     if (palindrome.charAt(left) != palindrome.charAt(right)) 
      return false; 

     left++; 
     right--; 
    } 

    return true; 

} 

// The output method displays commission and sales 
public static void display(boolean result, String palindrome) 
{ 
    if (result = true) 
    { 
     JOptionPane.showMessageDialog(null, palindrome 
       + " is a palindrome."); 
    } else 
     JOptionPane.showMessageDialog(null, palindrome 
       + " is not a palindrome."); 

} 

// finish() method exits program 
public static void finish() 
{ 
    System.exit(0); 
} 

} 
+0

"Пожалуйста, введите 5 цифр целое" вы имеете в виду, как 12345? целое число - это просто число. Я считаю, вы имеете в виду 5-символьное слово? –

+0

'if (result = true)' не будет компилироваться в Java. Вы уверены, что разместили свой настоящий код? –

+0

Daniel Bo, Да, эта инструкция определенно вызвала целое число, точно так же, как 12345 (или 12321 для действительного палиндрома – user2802785

ответ

2

== используется при сравнении значений.

= - оператор присваивания, а не оператор сравнения.

так попробовать:

if (result == true) 

или

if (result) 

Ваш полный код после редактирования:

public static void main(String args[]) 
{ 
    String input = retrieveInput(); 
    boolean result = check(input); 
    display(result, input); // change result = false 
    finish(); 
} 
+1

Это чище просто делать 'if (result)' и устраняет вероятность того, что вы сделаете ту же ошибку! –

+0

Захир Ахмед, спасибо! Я решил проблему. У меня была двойная проблема. Самая большая проблема заключалась в использовании «=» вместо «==» . Другая проблема заключалась в том, что при устранении неполадок я добавил «= false» на вызов «display (false, input)»; – user2802785

1

В этой строке

if (result = true) 

вы присваиваете значение true переменной result и это значение (true) используется в качестве условия для if, не проверяя, если result равно true. Другими словами, ваш if всегда будет оценивать свое состояние true.

Вы нуждались бы, чтобы использовать == оператор

if (result == true) 

или просто

if (result) 
3
if (result = true) 

наборы result к истинным и оценивает его (опять же, как true). Использование:

if(result==true) 

или

if(result) 

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

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