2015-04-15 69 views
0

所以我的代碼告訴我,在if語句中,我需要插入!= null檢查。爲什麼它告訴我這個以及如何爲String變量創建if語句?我是一名初學者,非常感謝您的幫助,但請留下解釋與您的答案,因爲我並不總是知道我在做什麼,沒有具體的細節。非常感謝!如何在Java中爲String變量創建if語句?

import java.util.Scanner; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.geom.Ellipse2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Game2 extends JPanel { 

public void paint(Graphics g) { //creates a void in order to paint 
    Graphics2D g2d = (Graphics2D) g; //creates 2D graphics 
    g2d.setColor(Color.YELLOW); //sets color 
    g2d.fillOval(350, 15, 25, 70); //draws oval 
    g2d.fillOval(400, 15, 25, 70); //draws 
    g2d.setColor(Color.RED); //sets color 
    g2d.fillRect(350, 120, 77, 25); //draws rectangle 

    Scanner game = new Scanner (System.in); //creating a new scanner 
    String mood, Happy, Satisfied, Sad, Nervous; //creates string 

    System.out.println("How are you feeling today? Pick one of the      following:"); 
    System.out.println(""); 
    System.out.println("Happy"); 
    System.out.println("Satisfied"); 
    System.out.println("Sad"); 
    System.out.println("Nervous"); 
    mood = game.nextLine(); 

    if (mood = Satisfied) { //I NEED HELP WITH THIS. IT TELLS ME I NEED TO  "Insert '!= null' check". WHY? THANKS IN ADVANCE! 
     g2d.setColor(Color.YELLOW); //sets color 
     g2d.fillOval(350, 15, 25, 70); //draws oval 
     g2d.fillOval(400, 15, 25, 70); //draws oval 
     g2d.setColor(Color.RED); //sets color 
     g2d.fillRect(350, 120, 77, 25); //draws rectangle 
     } 



    } 

    public static void main(String[] args) { //sets this class as main 
     JFrame frame = new JFrame("Ping Boom"); //sets title 
     frame.add(new Game2()); 
     frame.setSize(800, 500); //sets size of window 
     frame.setVisible(true); //sets visibility as a boolean 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //sets the ability for the window to close on command 


    } 

} 

回答

0

爲了檢查是否心情等於滿意:

變化:

if (mood = Satisfied) 

到:

if (mood.equals(Satisfied)) 
2

您已經聲明爲moodSatisfiedString對象,但你只能給分配一個值,所以Satisfied永遠是未分配

此外,檢查字符串平等的方式是使用String.equals (otherString)方法

嘗試

String satisfied = "Satisfied"; 
.... 

if (mood.equals (satisfied)) { 
... 
} 
1

在該行創建String,界定其內容那麼,而不是

String mood, Happy, Satisfied, Sad, Nervous; //creates string 

只有聲明變量沒有價值,做下列G:

String happy = "Happy"; 
String satisfied = "Satisfied"; 
String sad = "Sad"; 
String nervous = "Nervous"; 

和字符串比較,使用.equals.equalsIgnoreCase代替=。順便說一句,比較的正確操作符是==。有關==.equals之間的差異,請參閱this question

if (mood.equalsIgnoreCase(happy)) { 
    // do happy things 
} else if (mood.equalsIgnoreCase(satisfied)) { 
    // do satisfied things 
} 

作爲一個說明,這種 「固定數量的東西」 是更好地被表示爲枚舉:

enum Mood { 
    Happy, Satisfied, Sad, Nervous; 
} 

,以後你可以用switch聲明:

​​

enum的一個教程可以啓動您在enum上的閱讀: https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

0

首先,關於Java(和喜歡它的語言)是如何工作的一些信息:

在一般情況下,當你把1myvariable =值(任何地方),這是因爲如果你叫指派myvariablevalue值的函數。但請記住,函數可以返回值。因此,當您執行任務時,會調用「賦值函數」將給定值分配給給定變量,並返回具有新值的變量。這就是爲什麼你可以做這樣的事情,如a = b = c = d;

你可能知道,如果語句通過評估括號中的值爲true或false,並且如果該值爲true,則if語句的主體執行。這只是部分正確。在一切之下,布爾(真/假)值只是數字。 0是錯誤的,其他的都是真的。那麼,如果if語句檢查的是如果括號中的值不等於0,那麼它將執行循環體

Java中的所有對象都通過使用引用來跟蹤。 Java中的引用是內存地址,其中null等於0,並且表示非空對象的所有引用都等於正十六進制數。 A String是一個對象,並且您通過變量mood跟蹤String。用於跟蹤對象的變量是一個引用,它只是一個內存地址,它本質上只是一個數字。

在您的if語句中,您將Satisfied的值賦值給變量mood,就像它不在if語句中那樣。但請記住我之前說過的話。賦值就像函數調用一樣,它返回變量的新值。因此,在您的if語句中,您當前正在執行的任務計算結果賦值後的變量mood的值是字符串Satisfied的內存地址,實際上這只是一個數字。

Satisfied是一個存在的對象,所以它顯然不是null,null等於0,或者是false。所以如果某些東西不是虛假的,那麼它肯定是真的,因此你的if語句執行它的主體。

你得到一個錯誤的原因是那種類型的構造,其中一個賦值發生在一個評估爲布爾值的語句內,被認爲是不好的編程,因爲你不知道是否只有一個等號是事故或如果程序員真的打算這樣做的話。 Java同意這種邏輯,因此它不是讓你在默認情況下測試引用爲0(null),而是迫使你承認這樣的事實,即通過強制你在其之後放置一個!= null,這實際上意味着要做。在這樣做的時候,你明確地說「是的,我的意思是做這個任務而不是比較」。

你打算在這種情況下做什麼我假設是比較兩個字符串,不分配它們。當使用對象(以及擴展名,引用)時,==運算符會比較引用本身,而不是它們表示的對象(因爲引用只是內存地址,也就是數字)。所以你要在這種情況下,是什麼:

if (mood.equals(Satisfied)) 
{ 
    // do stuff 
} 

的.equals()方法的引用代表對象的比較,給你想要的東西。

0

在字符串中,您不能使用=符號如果您匹配字符串,您可以使用.equals 或者您可以使用.contains,您的問題.equals將工作。

如果(mood.equals(滿意))

,你也可以使用.equalsIgnoreCase(anotherString)