2016-02-13 31 views
0

任務是創建一個名爲Sentence的類,它將用來表示一個英文文本的句子。它應該具有以下功能:toString方法在我的程序中不正確

一個私有實例變量,字符串數組類型的單詞,包含組成該句子的單詞。

具有單個字符串數組作爲參數的構造函數。數組的元素將成爲句子中的單詞。

重寫Object類中提供的繼承的toString()的toString()方法。這應該返回由單個空格分隔的句子中所有單詞組成的單個字符串,它們按照單詞的順序排列。

一個shortest()方法,返回一個包含句子中最短單詞的字符串。 (如果有多個最短的單詞,則返回其中的一個)。

一個方法longest(),返回包含句子中最長單詞的String。 (如果有多於一個最長的單詞,則返回其中一個單詞)。 一個方法meanLength(),它返回句子中單詞的平均長度。

一個方法,sorted(),它返回按字母順序排列在String數組中的單詞。此方法不應修改數組字。 我的代碼是這樣的:

import java.util.Arrays; 

public class Sentence { 
    private String[] words; 

public Sentence(String[] words) { 
     this.words = words; 
    } 

    public String toString() { 
     String sentence = ""; 
     for (String word : words) sentence += word + " "; 

     return sentence; 
    } 

    public String shortest() { 
     String shortString = words[0]; 

     for (String string: words) { 
      if (string.length() < shortString.length()) { 
       shortString = string; 
      } 
     } 

     return shortString; 
    } 

    public String longest() { 
     String longString = words[0]; 

     for (String string: words) { 
      if (string.length() > longString.length()) { 
       longString = string; 
      } 
     } 

     return longString; 
    } 

    public double meanLength(){ 
     String[] strArray = Arrays.toString(words).split(" "); 
     int numWords = words.length; 
     int totalCharacters = 0; 
     for(int i = 0; i < numWords; i++) 
      totalCharacters = totalCharacters + words[i].length(); 

     return totalCharacters/numWords; 
    } 

    public String[] sorted(){ 
     Arrays.sort(words); 
     return words; 
    } 

    public static void main(String[] args) { 
      String[] wordList = {"A", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"}; 
      Sentence text = new Sentence(wordList); 
      System.out.println(text); 
      System.out.println("Shortest word: " + text.shortest()); 
      System.out.println("Longest word: " + text.longest()); 
      System.out.printf("Mean word length:%5.2f\n",text.meanLength()); 
      String[] sortedText = text.sorted(); 
      System.out.print("Sorted: " + Arrays.toString(sortedText)); 
     } 
} 

我不覺得我的toString方法是正確的,也不是我的平均字長。有人可以向我解釋實施這兩種方法的正確方法嗎?謝謝 :)。

+1

我沒有看到你的'toString'方法有什麼問題。但是,如果你打算在'meanLength'中返回一個double,你應該在任何除法之前將int賦值爲2。即'totalCharacters/numWords'應該是(double)totalCharacters /(double)numWords' –

+1

@CalvinP。感謝你,恩,我認爲toString方法有問題,因爲我必須創建一個數組副本,所以當排序發生時,oirignal數組不會受到影響。 – Leonardo

+0

只有關於性能的提示。在你的toString方法中,我建議使用StringBuilder來構造句子。 '+'操作符會導致大量的字符串複製。 –

回答

0

您可以撥打System.out.println("Sorted: " +text.toString());來驗證您的toString()方法main

或者,meanLength()可以被實現爲:

 public double meanLength(){ 

     //combine all words to one string 
     String combStr = new String(); 
     for(String string: words) 
      combStr += string; 

     return combStr.length()/(words.length*1.0); 
    } 

sorted()方法修改原始陣列字。可以在原始數組上使用clone()方法創建副本,然後對副本進行排序並返回排序後的副本。要驗證它沒有修改原始列表,可以在main的末尾調用的打印語句wordList

相關問題