Java 如何在一行中打印数组的所有内容?
我想知道一种在控制台中打印所有数组名[]及其所有内容的方法。要看到这样的东西: 西尔斯杨 我试过:Java 如何在一行中打印数组的所有内容?,java,Java,我想知道一种在控制台中打印所有数组名[]及其所有内容的方法。要看到这样的东西: 西尔斯杨 我试过: 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.setCar
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!
}
}
它打印奇怪的东西-->[Letter\u Myname]。Letter@1d5550d,对数组进行迭代
System.out.println(Arrays.toString(theArray));
在Letter
实现中,您必须像这样重写toString()
for(Letter l : name){
System.out.print(l);
}
如果不重写toString
,您将得到超类toString
实现
然后你必须做一些像这样棘手的事情才能得到工作,但不推荐这样做
@Override
public String toString(){
return caracter;
}
如果您使用的是Java 8,则可以执行以下操作:
for(Letter l : name){
System.out.print(l.getCaracter());
}
如果没有重写toString()
方法,可以尝试以下操作:
Arrays.asList(name).forEach(System.out::print);
除foreach外,还有三种其他解决方案:
- For循环
- 使用迭代器
- While循环
使用for循环:
Arrays.asList(name).forEach(l -> System.out.print(l.getCaracter()));
int i=0;
while (i<name.length) {
System.out.print(name[i].getCaracter());
i++;
}
toString()
和getCaracter()
都返回与您的caracter相同的变量,但首选toString,因为在打印对象时默认会调用它
另一种方法是使用迭代器:
首先,我们将名称
数组转换为arraylist:
for (int i=0;i<name.length;i++) System.out.print(name[i].getCaracter());
使用While循环:
Iterator itr = listLetters.iterator();
while(itr.hasNext()) {
Letter letter = itr.next();
System.out.print(letter);
}
我建议引入另一个类Word
来封装更多的内容。与其他方法相比,这种方法的优点是,如果您将程序扩展到句子
和段落
类,它将无缝融合
for(Letter letter : name){
System.out.print(letter .getCaracter());
}
词类
字母类
因为,您已经提供了Word#toString()
和Letter#toString()
实现;现在您可以简单地打印任何Word
而无需循环。循环仍然会发生,但类会自行为您执行。如果OP没有覆盖toString()Letter
类中的方法我可能会使用System.out.print(l.getCaracter())
Wow,我刚开始使用java,这是非常有用的信息。你能解释一下for(Letter l:name)的用法吗作品thanks@user2716652Java 1.5中引入的每个循环都是,有关这里阅读的更多信息,请参见数组。toString(elements)
以[elements[0].toString(),elements[1].toString(),…,elements[size-1].toString()]和fullClassName@hexHashCode
是默认值toString()的结果
从对象类继承的实现。您可以找到有关toString()方法的一些信息。这是正确的方法+1:)
int i=0;
while (i<name.length) {
System.out.print(name[i].getCaracter());
i++;
}
for(Letter letter : name){
System.out.print(letter .getCaracter());
}
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
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();
}
}
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);
}
}