2016-10-23 4 views
-1

私はJavaを使い慣れていませんが、私は以下のコードで迷っています。場合にはJavaのif-elseブロックでの等価比較の方法は?

boolean Smart; 
boolean Flat; 
int smallsmart = 322; 
int largesmart = 405; 

void price(){ 
    Scanner in = new Scanner(System.in); 
    System.out.printf("%nWhat Type of TV would you like Smart of Flat ??? ");//Prompts 
    boolean TV = in.next() != null; 

    System.out.println("What Size would you like 32 or 42 inch ?? ");//Prompts 
    int Size = in.nextInt();  

    if (TV = Smart && Size == 32){//start of if 
     System.out.println("The Price of your Tv is " + smallsmart);  
    } else if (TV = Smart & Size == 42){//start of if 
     System.out.println("The Price of your Tv is " + largesmart); 
    } 
+0

'in.next()!= null'は常にtrueです。 – molbdnilo

+1

ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

+0

'TV = Smart'は比較ではなく割り当てです –

答えて

0

スマートは偽(ブール値のデフォルト値)になります

をし、他の条件ならば、あなたは両方の条件のためにfalseになりますテレビ=スマート を述べた:それはコストをプリントアウトしていません。 それは何も印刷されない理由です。

コードを修正してください。 TV ==スマート

0

スマートバリューとフラットバリューの両方に値を割り当てていませんでした。

1等号=は、新しい値を割り当てることを意味します。 2等号2つの値の比較平均値 TV = Smartは実際にはTV変数にSmartの値を割り当てていることを意味します。

あなたはif (TV == Smart)

0

in.next() != nullにそれを変更する必要があり、常に真です。
Smartはデフォルト値を持つため、常にfalseです。
したがって、TV == Smartも常にfalseです。

あなたはまず

String TV = in.next(); 
// ... 
if (TV == "Smart" && ... 

または

boolean smart = in.next() == "Smart"; 
// ... 
if (smart && ... 
0
boolean smart; 
boolean flat; 
int smallSmart = 322; 
int largeSmart = 405; 

void price(){ 
    Scanner in = new Scanner(System.in); 
    System.out.println("What Type of TV would you like Smart of Flat ???"); 
    String typeOfTv = in.nextLine().toLowerCase(); 

    if(typeOfTv.equals("smart")) { 
     smart = true; 
    } else if(typeOfTv.equals("flat")) { 
     flat = true; 
    } else { 
     System.out.println("You have not selected an appropritate TV. Exiting..."); 
     System.exit(0); 
    } 

    System.out.println("What Size would you like 32 or 42 inch ?? ");//Prompts 
    int size = in.nextInt();  

    if (smart && size == 32){//start of if 
     System.out.println("The Price of your Tv is " + smallSmart);  
    } else if (smart & size == 42){//start of if 
     System.out.println("The Price of your Tv is " + largeSmart); 
    } 
} 

をしたい、私はあなたがキャメルケースの規則を持つ変数に名前を付けるお勧めします。

ここでは、スマート

TV = Smart 

にテレビを割り当てている=変数に値を割り当てるために使用され、==を比較するために使用されます。

0

あなたが覚えておくべきいくつかのことがあります。

まず、Javaの命名規則について学んでください。例の変数は小文字である必要があります(Smartの代わりにsmart)。ここでは、そのことについてのOracleドキュメントへのリンクです:http://www.oracle.com/technetwork/java/codeconventions-135099.html


第二に、===の間には大きな違いがあります。最初はの割り当て、もう1つはの比較です。


第三に、diferenceはその大きなではありませんが、あなただけの1 &または2を使用して間も選択shoul。 ifでは、少しの取引があります。1つ(&)は、を意味し、2つ(&&)を意味し、を意味します。これは、「短絡」です。

「短絡」とは何ですか?履歴書にそれがで蹴る数学である。この場合:

1 AND '何か' = '何か';。

0 AND '何か' = 0 ifなステートメントで使用すると、特定の変数がnullの場合、それを使用して前にチェックするwhantとき

Shurt-回路が良いです(意志短期cricuit &&付) NullPointerExceptionを投げないようにします。

if(variable != null && variable.isSomething()) { 
    //do stuff 
} 

変数variableが(それゆえvariable != nullfalseある)nullである場合、それはfalseに短絡し、それが非を読んしようとはしませんので、それが例外をスローしません。このような既存の変数。

評価を常に短絡することをお勧めします。

またはの機能で同じひもが発生します。あなたは普通の|と短絡のあるもの||を持っています。この中で数学は次のとおりです。

0 OR '何か' = '何か'

1 OR '何か' = 1


(意志短期cricuit ||付)

先に、boolean TV = in.next() != null;のようなものを書くときには、Scannerの場合は注意してください(私はそれを確信しています)、それはnullを返しませんが、空のStringを返すかもしれません。

私は助けてくれることを願っています。

よろしくお願いいたします。 :)

関連する問題