2014-09-18 49 views
1

我正在使用BlueJ来做到这一点,我有toString位的问题。我只是刚开始编程,所以如果我不知道所有技术方面的问题,请原谅我。 这是我的代码:使用循环的我的toString方法显示一个缺少元素的输出,我该如何解决它?

public String toString() 
{ 
    String s = "{" + list[0]; 

    for (int i = 0 ; i < list.length-1 ; i++) 
    { 
     i = i+1; 
     s = s + ", " + list[i]; 
     i = i+1; 
     s = s + ", " + list[i]; 
     i = i+1; 
     s = s + ", " + list[i]; 
    } 

    s = s + "}"; 
    return s; 

} // method toString 

我使用的是循环,因为我的数组被声明为:

public ListOfNVersion01PartB(int [] element) 
{ 
    list = new int[element.length]; 
    for (int i=0 ; i<element.length ; ++i) 
     list[i] = element[i]; 

} // constructor ListOfNVersion01Skeleton(int [] element) 

的这个输出是:

({2,4,7, 3})< - 这是一个阵列

的ToString() - > “{2,4,7,3}” < --This输出是正确

({1,2,3,4,9,8,7,6 < - 这是另一个

.toString() - >“{1,2,3,4,8,7,6 } < - 此输出缺少9

我该如何解决这个问题? 请记住,我不能添加任何类,因为它需要具有与基准输出相同的结构。 请帮忙。

+5

为什么你要在for循环中递增'i',循环索引**,这是一件非常危险的事情。您将需要阅读关于循环如何工作的教程,因为循环中的许多代码行和索引的递增都不应该完成。 – 2014-09-18 21:49:09

+2

提示:只有当数组的长度比1的倍数多3时才能正常工作。 – rgettman 2014-09-18 21:50:53

+2

只要执行s + = list [i]' – 2014-09-18 21:50:53

回答

0

问题是你没有足够的控制你的i变量。另一件事是,首先检查你的输入总是一个好习惯。我认为下面的代码可以帮助你。

public String toString(){ 
    if(list == null || list.length==0)return "{}"; 
    StringBuffer sb = new StringBuffer("{"+list[0]); 
    for(int i=0;i<list.length-1;i++){ 
     sb.append(","+list[i]); 
    } 
    sb.append("}"); 
    return sb.toString(); 
} 
1
StringBuilder sb = new StringBuilder("{"); 
for(String element: list){ 
    sb.append(element); 
    sb.append(","); 
} 
return sb.subSequence(0, sb.length()-1) + "}"; 
0

一个简单的字符串,是很容易的工作。

试试这个。

public String toString() 
    { 
     String s="{"+list[0]; 

     for(int i=1; i<list.length;i++) //starting at second element since first was placed in string 
     { 
      s+=", "+list[i];     
     } 

     s+="}"; 

     return s; 
    } 

让循环遍历数组。