2013-11-21 62 views
3

我有一個名爲LString(鏈接列表類),與我的其他節點類一起工作。我寫了一個toUppercase()方法,它遍歷字符序列並將小寫字母轉換爲大寫字母。鏈接列表返回類型錯誤的方法

我的問題是返回類型,這是我編碼很多時遇到的一個問題。我不確定如何返回所需的LString類型,因爲即使我鍵入return LString,它也會將其識別爲變量並給出相同的不兼容類型錯誤。

這裏是明確的錯誤:

LString.java:134: error: incompatible types 
     return current; 
      ^
    required: LString 
    found: Node 

怎樣在我的方法返回此所需類型LString的?

我對Java很新穎,掌握返回類型在編寫時看起來很麻煩。讓我知道我是否應該發佈我的全班。如果我的問題有點不清楚,讓我知道,我想在這個論壇上與用戶精簡。

按照這裏的要求,我的代碼更多地指定了我在這兩個類中所做的聲明。

我的節點類:

 public class Node{ 
     public char data; 
     public Node next; 

     //constructors from page 956 
     public Node() 
     { 
      this('\0',null); //'\0' is null char for java 
     } 

     public Node(char initialData, Node initialNext) 
     { 
      data = initialData; 
      next = initialNext; 
     } 
} 

而且我LString類(僅限構造函數和我toUppercase方法我將列出):

public class LString{ 

    private Node front = null; //first val in list 
    private Node back; //last val in list 
    private int size = 0; 
    private int i; 

    public LString(){ 
     //construct empty list 
     Node LString = new Node(); 
     front = null; 

    } 
    public LString toUppercase(){ 
     Node current = front; 
     while(current != null){ 
     current.data = Character.toUpperCase(current.data); 
     current = current.next; 
     } 
     return front; 
    } 
} 

如果我需要提供了信息讓我知道。

+0

你應該澄清你的意思是什麼_「我有一個叫做LString的類,可以和我的其他Node類一起工作」_。他們如何「共同工作」?他們之間有什麼關係? –

+0

@ÓscarLópez我的LString類是一個引用我的Node類的鏈表。我的節點類用於初始化單個鏈接的節點。你想讓我上兩門課還是兩門課? – AOE

+0

是的,你需要發佈兩個類的聲明(不是全部,特別是刪除與這個問題無關的方法),否則問題不清楚 –

回答

1

返回所需LString簡單地做:

return this; 

因爲LString是包含鏈表的第一個節點的類,並且所有的修改列表的方法應該簡單地返回。另請注意,這條線在構造函數中無所事事,你可以將其刪除:

Node LString = new Node(); 
+0

唯一的問題是我們給這個具體的方法叫做LString toUppercase。否則,我完全會改變方法聲明中的返回類型。 – AOE

+0

@AOE然後請回答我的問題 –

+0

上面的評論好的,我不知道你可以簡單地使用'this'來返回方法聲明中的類型。謝謝! – AOE

1
public LString toUppercase(){ 
     Node current = front; 
     while(current != null){ 
     current.data = Character.toUpperCase(current.data); 
     current = current.next; 
     } 
     return front; 
} 

frontNode型的,但該方法的簽名是public LString toUppercase(),這意味着它有望復出一個LString實例。

想想你是什麼實際上想要返回。你想返回一個包含大寫字符的LString,對嗎?但那已經是你正在合作的實例!所以,你可以返回this

public LString toUppercase(){ 
     Node current = front; 
     while(current != null){ 
     current.data = Character.toUpperCase(current.data); 
     current = current.next; 
     } 

     return this; 
} 

但在這種情況下,你仍然需要打印出的大寫字符的另一種方法:

LString lString = new LString(); 
... 
... 
lString.toUppercase(); //lString is already modified and contains uppercase characters! You 
         //don't have to "return" anything. If you returned "this" this 
         //line would be lString = lString.toUppercase(), but that's 
         //not buying you anything special. 
System.out.println(lString.toString()); //Assuming you have a toString method 
             //that prints out the characters. 

通過調用您已經修改了您的LStringtoUppercase實例方法所以實際上不需要返回任何東西。