2014-04-03 117 views
0

添加一個方法來測試Phrase構造函數將字符串轉換爲大寫字母。 DO 不在測試中使用toUpperCase方法。使用一個文字字符串(一個引號,如 「這是一個文字字符串」)。請記住,您不能使用==來比較兩個對象 (字符串是對象);您必須使用equals方法。Java。添加一個方法來測試構造函數

我得到一個「論證的左手側必須是變量」錯誤。

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

你有兩個問題,我可以看到。

首先,你正在做的分配,而不是在你的if條件的比較。這是什麼導致你所看到的(你想的phrase.toUpperCase()結果分配給String.compareTo(phrase("test"))錯誤。

的第二個問題是,有一個名爲compareToString類沒有static方法,所以即使你修復條件來做比較而不是分配,這仍然行不通。有 a compareTo(String)方法在String類,但它不是staticcompareTo是一個實例方法,因此您需要一個對象來調用該方法,您不能像當前正在嘗試的那樣從靜態上下文中調用它。

我最適合你想要什麼來實現將是這樣的猜測:

public boolean phraseTest(Phrase phrase) { 
    return "TEST".equals(phrase.getPhrase()); 
} 

我已經改變了phrase參數是Phrase類的一個實例(否則就不是真正的測試Phrase是什麼呢?)

+0

這是怎麼測試構造函數將輸入轉換爲大寫? –

+0

它沒有。無可否認,我沒有對'Phrase'構造函數給予足夠的重視,所以沒有注意到它正在做這件事。我將編輯以反映這一點。 – JonK

+0

好吧,我已經刪除了我的downvote,現在你已經修好了。 –

1

什麼是你想在該行if (String.compareTo(phrase("test")) = phrase.toUpperCase())辦? String.compareTo是一個函數,所以編譯器告訴你String.compareTo不是一個變量;和短語是一個字符串(這是傳入的參數),所以我不確定你的意思?也許你的意思是new Phrase(phrase).getPhrase().equals(phrase.toUpperCase())

1

因爲當你使用單=操作,你正在做的賦值操作,編譯器期望在左側一個變量保存在右邊的值

因此,嘗試改變這一行:

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

喜歡的東西:

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

您剛剛進行的編輯無效。 「短語(字符串)」表示「短語」是一種方法。你需要實例化'Phrase'類。 – nrubin29

+0

我如何獲得它來測試一個字符串,以確保我設置短語toUpperCase? – user3381466

+0

如果你的意思是你從'getPhrase()'得到的值,你可以在'getPhrase()'之後加一個'toUpperCase()'調用。 – nrubin29

1

,做測試應該像

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

或者更好的是,如果你使用JUnit,做一個斷言

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

在這兩種情況下,我們正在做一個新的Phrase,並確保它裏面的實際文本上我們通過什麼樣的個人版本。

如果這樣可以讓你更容易理解,你甚至可以把它分成兩行。

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

順便說一句,你的類有一個bug,因此本次測試將會失敗,直到您修復bug。