添加一个方法来测试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;
}
}
答案 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
吗?)