Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.out.println(不是空字符串);打印出一个空字符串(也称为nothing)_Java - Fatal编程技术网

Java System.out.println(不是空字符串);打印出一个空字符串(也称为nothing)

Java System.out.println(不是空字符串);打印出一个空字符串(也称为nothing),java,Java,好的,让我解释一下我的问题: 代码: System.out.println(“消息是:+focusOwner+focusOwner.getPage()==null+focusOwner.getText()) 输出: false 备选代码: System.out.println(“消息为:+focusOwner”) 输出: 消息是:pscript.gui.elements.Answer[,0,98639x22,无效,layout=net.miginfocom.swing.migloayout,al

好的,让我解释一下我的问题:

代码:

System.out.println(“消息是:+focusOwner+focusOwner.getPage()==null+focusOwner.getText())

输出:

false

备选代码:

System.out.println(“消息为:+focusOwner”)

输出:

消息是:pscript.gui.elements.Answer[,0,98639x22,无效,layout=net.miginfocom.swing.migloayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth。SynthBorder@677b15f3,flags=9,maximumSize=,minimumSize=,preferredSize=]

一些事实:

focusOwner是一个类Answer,它扩展了扩展JPanel的元素。toString()方法永远不会被重写。证明:

public class Answer extends Element
{
    private static final long serialVersionUID = 1L;
    private JLabel letter;
    private JCheckBox check;
    private Question question;

    //getter and setters
    void setQuestion(Question question)
    {
        this.question = question;
    }

    public Question getQuestion()
    {
        return question;
    }

    JLabel getLetter()
    {
        return letter;
    }

    public boolean isCorrect()
    {
        return check.isSelected();
    }

    public String getLetterText()
    {
        return letter.getText();
    }

    //navigational methods
    @Override
    public Element getPreviousElement()
    {
        Element previousElement = getQuestion().getPreviousAnswer((Answer) getElement());

        if (previousElement != null)
        {
            return previousElement; 
        }

        else
        {
            return getQuestion();
        }
    }

    @Override
    public Element getNextElement()
    {
        Element nextElement = getQuestion().getNextAnswer((Answer) getElement());

        if (nextElement != null)
        {
            return nextElement;
        }

        else
        {
            nextElement = getPage().getNextElement(getQuestion());

            if (nextElement != null)
            {
                return nextElement;
            }

            else
            {
                Page nextPage = getChapter().getNextPage(getPage());

                if (nextPage != null)
                {
                    return nextPage.getLastElement().lastElement();
                }

                else
                {
                    Chapter nextChapter = getDocument().getNextChapter(getChapter());

                    if (nextChapter != null)
                    {
                        return nextChapter.getTitle();
                    }

                    else
                    {
                        return getDocument().getChapter(1).getTitle();
                    }
                }
            }
        }
    }

    //other methods
    private Element addNextElement()
    {
        if (getQuestion().getAnswerCount() < 5)
        {
            return addNextAnswer();
        }

        else
        {
            return addNextQuestion();
        }   
    }

    private Answer addNextAnswer()
    {
        Answer nextAnswer = new Answer();

        getQuestion().addAnswer(nextAnswer, getQuestion().getAnswerIndex((Answer) getElement())+1);
        getQuestion().rewriteLetters();

        return nextAnswer;
    }

    private Question addNextQuestion()
    {
        Question nextQuestion = new Question();

        getPage().addElement(nextQuestion, getPage().getElementIndex(getQuestion())+1);
        getChapter().rewriteNumbers();

        return nextQuestion;
    }

    private Element removeAnswer()
    {
        Element previousElement = getPreviousElement();

        Question question = getQuestion();

        question.removeAnswer((Answer)getElement());
        question.rewriteLetters();

        return previousElement;
    }

    private void checkLoop()
    {   
        Question question = getQuestion();

        if (question != null)
        {
            getDocument().setSaved(false);

            if ((check.isSelected()) && (question.checkFlag == false))
            {       
                question.checkFlag = true;
                int answerCount = question.getAnswerCount();

                for (int i = 1; i <= answerCount; i++)
                {
                    question.getAnswer(i).check.setSelected(false);
                }

                check.setSelected(true);
                question.checkFlag = false;
            }   
        }
    }

    //actions
    @Override
    void primaryAction()
    {
        addNextElement().takeFocus();
    }

    @Override
    void secondaryAction()
    {
        addNextQuestion().takeFocus();
    }

    @Override
    void deleteAction()
    {
        removeAnswer().takeFocus();
    }

    //constructors
    Answer()
    {
        super();

        setBackground(Color.WHITE);

        //TODO
        check = new JCheckBox();
        check.setBackground(Color.WHITE);

        check.addItemListener(new ItemListener()
        {
            @Override
            public void itemStateChanged(ItemEvent arg0)
            {
                checkLoop();
            }
        });

        add(check, "top, gapleft " + LayoutConstants.CHECK_SPACE_LEFT + ", gaptop "+ LayoutConstants.CHECK_ABOVE + ", w " + LayoutConstants.CHECK_WIDTH);

        letter = new JLabel("a)", SwingConstants.LEFT);
        letter.setFont(Main.otherFont);
        letter.setBackground(Color.WHITE);
        add(letter, "top, gaptop " + LayoutConstants.LETTER_ABOVE + ", w " + LayoutConstants.LETTER_WIDTH);

        getTextBox().setMargin(LayoutConstants.ANSWER_INSETS);
        add(getTextBox(), "span, grow, push, w " + LayoutConstants.ANSWERBOX_WIDTH);
    }

    public Answer(String text, boolean correct)
    {
        this();
        getTextBox().setText(text);
        check.setSelected(correct);
    }
}
getPage()返回它的一个私有变量,该变量为空或不为空(在本例中为空)

getText()调用类中包含的JTextArea的getText()方法,并返回其返回值(在本例中它实际上是一个空字符串)

在那里。这是我能给你的最接近SSCCE的东西

编辑:

你如何解释这一点:

System.out.println("Message is:" + focusOwner + focusOwner.getPage() == null + focusOwner.getText());
System.out.println("Message is:" + focusOwner);
退回此邮件:

false
Message is:pscript.gui.elements.Answer[,0,98,639x22,invalid,layout=net.miginfocom.swing.MigLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@1b2a8c70,flags=9,maximumSize=,minimumSize=,preferredSize=]

我们讨论的是同一个变量的值在两行连续的代码中被打印出来,并且它没有相同的值。

假设问题是为什么

System.out.println("Message is:" + focusOwner + focusOwner.getPage() == null + focusOwner.getText());
打印
false
而不是在另一种情况下得到的长字符串:

+
运算符的优先级高于
=
运算符。因此,您正在打印的内容是:

("Message is:" + focusOwner + focusOwner.getPage()) == (null + focusOwner.getText())
或者两个
String
对象之间相等比较的结果。显然,双方并不平等

你想要的是

System.out.println("Message is:" + focusOwner + (focusOwner.getPage() == null) + focusOwner.getText());

假设问题是为什么

System.out.println("Message is:" + focusOwner + focusOwner.getPage() == null + focusOwner.getText());
打印
false
而不是在另一种情况下得到的长字符串:

+
运算符的优先级高于
=
运算符。因此,您正在打印的内容是:

("Message is:" + focusOwner + focusOwner.getPage()) == (null + focusOwner.getText())
或者两个
String
对象之间相等比较的结果。显然,双方并不平等

你想要的是

System.out.println("Message is:" + focusOwner + (focusOwner.getPage() == null) + focusOwner.getText());

你有什么问题?来吧。。。。你的房间在哪里?如果您无法创建sscce,那么您没有隔离您的问题。。。我们也不能,除非你强迫我们自己创建SSCCE,这对我们来说真的不公平,因为我们是志愿者,是吗?你给我们展示了字符串和布尔表达式连接的输出,以及一些对象的输出。什么也不输出(如标题所示)的情况如何?Outtputing对象是一个JPanel扩展,其toString()方法未被触及且未被覆盖。在println()方法中,它应该仍然像普通的JPanel一样工作。我无法解释我不理解的代码。我担心您在上面的解释中过度简化了复杂的代码,并且针对这个问题使用了错误的代码。请尝试找到一些方法,以尽可能小的代码重现您的问题,并将其发布在这里,或者如果绝对必要,发布在pastebin(我通常避免)。您的问题是什么?来吧。。。。你的房间在哪里?如果您无法创建sscce,那么您没有隔离您的问题。。。我们也不能,除非你强迫我们自己创建SSCCE,这对我们来说真的不公平,因为我们是志愿者,是吗?你给我们展示了字符串和布尔表达式连接的输出,以及一些对象的输出。什么也不输出(如标题所示)的情况如何?Outtputing对象是一个JPanel扩展,其toString()方法未被触及且未被覆盖。在println()方法中,它应该仍然像普通的JPanel一样工作。我无法解释我不理解的代码。我担心您在上面的解释中过度简化了复杂的代码,并且针对这个问题使用了错误的代码。请尝试找到一些方法,以尽可能小的代码重现您的问题,并将其发布在这里,或者如果绝对必要,发布在pastebin中(我通常避免使用)。现在这是一个很好的方法!非常感谢你。我想我爱你。现在这是个好机会!非常感谢你。我想我爱你。