2011-06-11 107 views
0

我有一個28個字符的數組。我試圖使用for循環來打印字符串及其長度,以便下一行刪除上一行中的最後一個字符。例如:打印數組

7 Example 
6 Exampl 
5 Examp 
4 Exam 
3 Exa 
2 Ex 
1 E 

我有這個到目前爲止,但它不是打印。我究竟做錯了什麼?

for(int index=28; index <= nameArray.length; index--) 
      { 
       System.out.print(nameArray[index]); 
      } 
+0

爲什麼索引從28開始? 'index <= nameArray.length'將產生一個錯誤。你爲什麼試圖向後打印數組? – 2011-06-11 17:16:14

+0

夥計@ SO ...這是這個傢伙關閉2天前提出的同樣的問題:http://stackoverflow.com/questions/6286524/using-an-if-statement-to-examine-an-array -in-java – 2011-06-11 17:32:09

+0

這不是同一個問題。我有一個分配使用相同的數組與多個部分。我已經明白了這一點。 – JDB 2011-06-11 17:38:30

回答

3

就這麼簡單..

class A { 
    public static void main(String [] args) { 
     String array = "Example"; 

    for(int i=7;i>0;i--) { 
      System.out.print(i+" ");  
      System.out.println(array.substring(0, i)); 
     } 
     } 
    } 

// Output : 
7 Example 
6 Exampl 
5 Examp 
4 Exam 
3 Exa 
2 Ex 
1 E 
2

如果長度爲28個字符,則無法啓動在爪哇28陣列的索引是從零開始的,從而意味着該索引可以從0到27的範圍內(長度 - 1)。

1

首先,你可能希望你的中間狀態是index > 0,不index <= nameArray.length(應始終是真實的,甚至當你進入負數)。

其次,是個字符的數組您正在訪問嗎?如果是這樣,那麼我相信你知道,nameArray[index]是指一個字符,而不是一個字符串。

(此外,如bobbymcr points out,在28個元件陣列的頂部的索引是27,而不是28)

要打印的子串,應該首先使用字符數組,然後打印日益初始化String更小的子串使用substring

例如:

private static void printSubstrings(String input) { 
    for (int length = input.length(); length > 0; length--) { 
     System.out.printf("%d %s\n", length, input.substring(0, length)); 
    } 
} 

然後,如果nameArraychar[],則可以使用String(char[])構造函數來傳遞給該方法:

printSubstrings(new String(nameArray)); 

示例輸入:

char[] nameArray = new char[] { 'E', 'x', 'a', 'm', 'p', 'l', 'e' }; 
printSubstrings(new String(nameArray)); 

輸出:

7 Example 
6 Exampl 
5 Examp 
4 Exam 
3 Exa 
2 Ex 
1 E 
0
for(int index=28; index <= nameArray.length; index--) 

首先,你想在指數28啓動 - 不存在。陣列是0的基礎,這意味着他們從0length - 1

其次,你是說索引必須小於或等於長度。既然你要從頭到尾,那永遠是真的。

for (int index = nameArray.length - 1; index >= 0; index--) 

這就是你要找的。

+0

在最後一個例子中,也許你的意思是'nameArray.length' – 2011-06-11 17:20:22

+1

已經在編輯;) – 2011-06-11 17:20:54

1

始終remeber的數組索引從0

[E][x][a][m][p][l][e] 
0 1 2 3 4 5 6 

開始我不明白你爲什麼用字符數組打破你的頭,當你有字符串。 在這裏,我提出你一個解決方案,其中:

1變換炭[]爲String

2-迭代字符串對象,並使用從String類的一些方法,以獲得所需的結果:

public class Example 
{ 
    public static void main(String[] args) { 

     //Here an array with 28 characters 
     char[] array = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p' 
      ,'q','r','s','t','u','v','w','x','y','z','!','@'}; 

     //For easier manipulation i will just transform that array to String 
     //Why not, String was invented so we dont have to use char[]. 
     String arrayAsString = new String(array); 

    //Use the methods that String class provides, to make the solution easier  
    for(int i=0;i < array.length;i++) {  
     System.out.println((i+1) + " " + arrayAsString.substring(0,(arrayAsString.length()-i))); 
    } 
    } 
}