2013-06-27 4 views
0

Мой код:выпуск по сравнению струнной

import java.io.*; 
public class compute_volume 
{ 
    public static void main(String args[])throws IOException{ 
     InputStreamReader reader = new InputStreamReader(System.in); 
     BufferedReader input = new BufferedReader(reader); 
     boolean answer; 
     double radius,height; 
     final double pi = 3.14159; 
     do{System.out.println("Enter the radius,press enter and then enter the height"); 
     String t = input.readLine(); 
     radius = Integer.parseInt(t); 
     t = input.readLine(); 
     height = Integer.parseInt(t); 
     System.out.println("The volume of a cylinder with radius " + radius + " and height " + height + " is " + (pi*pi*height) + "\n Thanks for using my cylinder volume calculator.Enter \"yes\" to use again or \"no\" to stop."); 
     t = input.readLine(); 
     System.out.println(t); 
     if (t == "yes"){ 
      answer = true; 
     }else{ 
      answer= false; 
     } 
    }while(answer); 
    } 
} 

Проблема:

Пользователь вводит yes но калькулятор не перезагружается.

Решение:

Вот что я не знаю, и надеюсь, знать, разместив это здесь.

+6

Этот вопрос заслуживает upvote? C'mon guys ... – jahroy

+0

Что? Я предлагаю, чтобы каждый автор книги Java размещал это на обложке. С красными подчеркнутыми крышками. – tkroman

ответ

6

использование

if ("yes".equalsIgnoreCase(t)) 

вместо

if (t == "yes") 

равно метод проверяет содержимое строк, а == проверяет объект равенства.

Прочитать соответствующие пост для понимания:

Java String.equals versus ==

+1

+1 ... Я сталкивался с той же проблемой со сравнением строк несколько дней назад. Я сделал 'String.contentEquals (" ")', чтобы решить эту проблему. Сначала я подумал, что оператор '==' будет работать так же, как на C#. Хорошо знать, что ответ, который я нашел, был прав.:) – Writwick

6

Некорректное сравнение String, вместо:

if (t == "yes"){ 

вы должны иметь

if ("yes".equalsIgnoreCase(t)) { 
+1

Спасибо за помощь –

1

В Java для String не забудьте использовать «equals()», но не «==».

answer="yes".equalsIgnoreCase(t); 

заменить код:

if (t == "yes"){ 
     answer = true; 
    }else{ 
     answer= false; 
    } 
1

Правильно это:

if ("yes".equalsIgnoreCase(t)) 

, а затем

if (t == "yes") 

Если мы не переопределить Equals(), то по умолчанию Equals() класса объекта. Таким образом, он будет сравнивать е содержимое, а не объект.

1

Лучше использовать следующим образом

import java.io.*; 
import java.util.Scanner; 

public class compute_volume { 
    public static void main(String args[])throws IOException{ 
    Scanner sc = new Scanner(System.in); 
    boolean answer; 
    double radius,height; 
    final double pi = 3.14159; 
    do{System.out.println("Enter the radius,press enter and then enter the height"); 
     String t = sc.nextLine(); 
     radius = Double.parseDouble(t); 
     t = sc.nextLine(); 
     height = Double.parseDouble(t); 
     System.out.println("The volume of a cylinder with radius " + radius + " and height " + height + " is " + (pi*pi*height) + "\n Thanks for using my cylinder volume calculator.Enter \"yes\" to use again or \"no\" to stop."); 
     t = sc.nextLine(); 
     System.out.println(t); 
     if (t.equalsIgnoreCase("yes")){ 
      answer = true; 
     }else{ 
      answer= false; 
     } 
    }while(answer); 
} 
} 
+0

Что такое «Сканер»? –

+0

import java.util.Scanner –

+0

И все-таки что это на самом деле? –