所以我的代码告诉我,在if语句中,我需要插入!= null check。为什么告诉我这个以及如何为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 :(得分:2)
您已将mood
和Satisfied
同时声明为String
个对象,但您只需为mood
分配一个值,因此Satisfied
始终会被取消分配
此外,检查字符串相等性的方法是使用String.equals (otherString)
方法
尝试
String satisfied = "Satisfied";
....
if (mood.equals (satisfied )) {
...
}
答案 1 :(得分:1)
在创建String
的行中,也定义了他们的内容,而不是
String mood, Happy, Satisfied, Sad, Nervous; //creates string
只声明变量没有值,请执行以下操作:
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表示:
enum Mood {
Happy, Satisfied, Sad, Nervous;
}
以后您可以使用switch
声明:
Mood mood;
// codes here to assign mood
switch (mood) {
case Happy:
// do happy things
case Satisfied:
// do satisfied things
case Sad:
// do sad things
case Nervous:
// do nervous things
}
enum的一个教程,用于启动你对enum的阅读: https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
答案 2 :(得分:0)
为了检查心情是否等于满意:
变化:
if (mood = Satisfied)
为:
if (mood.equals(Satisfied))
答案 3 :(得分:0)
首先,有关Java(及其类似语言)如何工作的一些信息:
通常,当你输入1myvariable = value1(任何地方)时,就好像你调用了一个赋予myvariable
值value
的函数。但请记住,函数可以返回值。因此,当您进行作业时,"赋值功能"调用将给定值分配给给定变量 ,并返回带有新值的变量 。这就是你可以做a = b = c = d;
您可能知道if语句通过评估括号中的内容为true或false的值来工作,如果该值为true,则执行if语句的主体。这只是部分正确。在所有内容下,布尔值(true / false)只是数字。 0是假的,其他任何事都是真的。那么if语句检查的是 如果括号中的值不等于0,那么它将执行循环体 。
通过使用引用来跟踪Java中的所有对象。 Java中的引用是内存地址,其中null
等于0,并且表示非空对象的所有引用都等于正十六进制数。 String
是一个对象,您通过变量String
跟踪mood
。用于跟踪对象的变量是一个引用,它只是一个内存地址,实际上只是一个数字。
在if语句中,您将Satisfied
的值分配给变量mood
,就像它不在if语句中一样。但请记住我之前说过的话。赋值就像函数调用一样,它返回带有新值的变量。因此,在if语句中,您当前正在执行的赋值在赋值后求值变量mood
的值,即字符串Satisfied
的内存地址,实际上只是一个数字。< / p>
Satisfied
是一个存在的对象,因此它显然不是null
,而null等于0或false。因此,如果某些东西不是假的,那么它必须是真的,因此你的if语句会执行它的主体。
你得到错误的原因是这种类型的构造,其中赋值发生在一个评估为布尔值的语句中,被认为是错误的编程,因为你不知道只有一个等号是一个意外或者如果程序员真的想要这样做的话。 Java同意这个逻辑,因此默认情况下它不会让你测试引用为0(null
),而是强迫你通过强迫你放置一个这个事实来强制你这样做。 != null
之后。在这样做时,你明确地说'是的,我打算做那个任务而不是比较&#34;。
我假设在这种情况下你要做的是比较两个字符串,而不是分配它们。使用对象(以及扩展名,引用)时,==
运算符会比较引用本身,而不是它们所代表的对象(因为引用只是内存地址,也就是数字)。所以在这种情况下你想要的是:
if (mood.equals(Satisfied))
{
// do stuff
}
.equals()方法对引用所代表的对象进行比较,为您提供所需的内容。
答案 4 :(得分:0)
在字符串中你不能使用= sign如果要匹配你可以使用的字符串.equals 或者你可以使用.contains,为你的问题.equals会工作。
如果(mood.equals(满足))
你也可以使用.equalsIgnoreCase(anotherString)