2011-06-11 106 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))); 
    } 
    } 
}