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);
    }

}