Java的。添加方法来测试构造函数

时间:2014-04-03 19:02:30

标签: java

添加一个方法来测试Phrase构造函数将字符串转换为大写。做 不要在测试中使用toUpperCase方法。使用文字字符串(如引号中的一个) “这是一个文字字符串”)。请记住,您不能使用==来比较两个对象 (字符串是对象);您必须使用equals方法。

  

我得到的是“争论的左手边必须是变量”错误。

public class PhraseTest {


public boolean phraseTest(String phrase) {

    boolean passes = false;
    if (String.compareTo(phrase("test")) = phrase.toUpperCase()) {

    System.out.println(phrase);
    return passes;
}
}
}
  

这里不同的班级。

 package edu.htc.java1.phrasegame.model;

import java.util.ArrayList;

public class Phrase {
    private String phrase;

    public Phrase(String phrase) {
        phrase = phrase.toUpperCase();
        for(char c : phrase.toCharArray()) {
            letters.add(new Letter(c));
        }
    }

    public String getPhrase() {
        return phrase;
    }

    // public String phrase;
    ArrayList<Letter> letters = new ArrayList<Letter>();

    public ArrayList<Letter> getLetters() {
        return letters;
    }

}

4 个答案:

答案 0 :(得分:1)

你想在if (String.compareTo(phrase("test")) = phrase.toUpperCase())行做什么? String.compareTo是一个函数,因此编译器告诉你String.compareTo不是一个变量;和短语是一个字符串(它是传入的参数)所以我不确定你的意思?也许你的意思是new Phrase(phrase).getPhrase().equals(phrase.toUpperCase())而不是?

答案 1 :(得分:1)

因为当你使用单=次操作时,你正在进行赋值操作,编译器在左侧需要一个变量来保存右边的值。

因此,请尝试更改此行:

if (String.compareTo(phrase("test")) = phrase.toUpperCase()) {

类似于:

if (new Phrase("test").getPhrase().equals(phrase.toUpperCase())) {

答案 2 :(得分:1)

进行测试的行应该是

if ("TEST".equals(new Phrase("test").getPhrase())) {

或者更好的是,如果您正在使用JUnit,请执行Assert

Assert.assertEquals("TEST", new Phrase("test").getPhrase());

在这两种情况下,我们都会创建一个新的Phrase,并确保其中的实际文本是我们传入的大写版本。

如果这让你更容易理解,你甚至可以把它分成两行。

Phrase phraseToTest = new Phrase("test");
if ("TEST".equals(phraseToTest.getPhrase())) {

顺便提一下,你的班级有一个bug,所以这个测试会失败,直到你修复bug。

答案 3 :(得分:0)

我可以看到两个问题。

首先,您在if条件下进行分配而不是比较。这就是导致您看到错误的原因(您尝试将phrase.toUpperCase()的结果分配给String.compareTo(phrase("test"))

第二个问题是static类中没有名为String的{​​{1}}方法,所以即使您修复条件进行比较而不是分配,这仍然是不行。 compareTo类中的compareTo(String)方法,但不是String static是一个实例方法,因此您需要一个对象来调用该方法,您不能像当前尝试那样从静态上下文中调用它。

我对你想要实现的内容的最佳猜测是:

compareTo

我已将public boolean phraseTest(Phrase phrase) { return "TEST".equals(phrase.getPhrase()); } 参数更改为phrase类的实例(否则它不是真的在测试Phrase吗?)