public class Myname {
public static void main(String args[]){
Letter s = new Letter(); s.setCaracter("s");
Letter e = new Letter(); e.setCaracter("e");
Letter a = new Letter(); a.setCaracter("a");
Letter r = new Letter(); r.setCaracter("r");
Letter y = new Letter(); y.setCaracter("y");
Letter o = new Letter(); o.setCaracter("o");
Letter u = new Letter(); u.setCaracter("u");
Letter n = new Letter(); n.setCaracter("n");
Letter g = new Letter(); g.setCaracter("g");
Letter name[] = new Letter[10];
name[0] = s;
name[1] = e;
name[2] = a;
name[3] = r;
name[4] = s;
name[5] = y;
name[6] = o;
name[7] = u;
name[8] = n;
name[9] = g;
System.out.println(nombre[0].);//HERE!
}
}
我想知道一种在控制台中打印所有数组名称[]的方法,以及他的所有内容。看到这样的事情: searsyoung
我尝试过:
System.out.println(Arrays.toString(theArray));
它打印奇怪的东西----> [Letter_Myname.Letter@1d5550d,...
答案 0 :(得分:6)
迭代数组。
for(Letter l : name){
System.out.print(l);
}
在Letter
实施中,你必须像这样覆盖toString()
@Override
public String toString(){
return caracter;
}
如果您不覆盖toString
,您将获得超级toString
实施
然后你必须做一些像这样棘手的工作但不推荐。
for(Letter l : name){
System.out.print(l.getCaracter());
}
答案 1 :(得分:3)
我建议引入另一个类Word
来封装更多内容。与其他方法相比,它的优势在于,如果您将程序扩展到Sentence
和Paragraph
类,它将无缝融合。
Letter[] name = new Letter[10];
// name[i] = ...
Word fname = new Word(name);
System.out.println(fname); // searsyoung
// Check the Letter class updates below
System.out.println(new Word(new Letter('J'), new Letter('o'),
new Letter('h'), new Letter('n'))); // John
Word Class
public class Word {
private Letter[] letters;
// makes use of var-args
public Word(Letter... word) {
this.letters = word;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Letter l : letters) {
sb.append(l);
}
return sb.toString();
}
}
Letter Class
public class Letter {
private char c; // Prefer char over String
public Letter(char c) {
this.c = c;
}
public Letter() { // use new Letter('c') directly
} // instead of two steps: new Letter(); setCaracter();
public void setCaracter(char c) {
this.c = c;
}
public char getCaracter() {
return c;
}
@Override
public String toString() {
return Character.toString(c);
}
}
因为,您提供了Word#toString()
和Letter#toString()
两种实现方式;您现在只需打印任何Word
而无需循环播放。循环仍然会发生,但是类会自己为你做这件事。
答案 2 :(得分:2)
除了foreach之外,还有其他三种解决方案:
使用for循环:
for (int i=0;i<name.length;i++) System.out.print(name[i]);
在这种情况下,您需要在Letter类或getter getCaracter()中定义toString()
,以返回值或您的角色。
然后它变成了:
for (int i=0;i<name.length;i++) System.out.print(name[i].getCaracter());
toString()
和getCaracter()
都会返回相同的变量,但首选的是toString,因为在打印对象时默认调用它。
另一种方法是使用Iterator :
首先我们将name
数组转换为arraylist:
ArrayList<Letter> listLetters = new ArrayList<Letter>( Arrays.asList(name) );
然后我们使用iterator()迭代它:
Iterator itr = listLetters.iterator();
while(itr.hasNext()) {
Letter letter = itr.next();
System.out.print(letter);
}
使用While循环:
int i=0;
while (i<name.length) {
System.out.print(name[i].getCaracter());
i++;
}
使用foreach循环:
for(Letter letter : name){
System.out.print(letter .getCaracter());
}
答案 3 :(得分:1)
如果您使用的是Java 8,则可以执行以下操作:
Arrays.asList(name).forEach(System.out::print);
如果您没有覆盖toString()
方法,可以试试这个:
Arrays.asList(name).forEach(l -> System.out.print(l.getCaracter()));