如何创建显示字符串数组的方法

时间:2017-05-14 04:45:27

标签: java arrays string

我正在尝试编写一个构造一个包含特定字符串值的数组的类,我还想在同一个类中创建一个显示数组值的方法。这是我到目前为止所拥有的

    import java.util.Arrays; 

public class Courses
{
    private int next;
    String [] studentArray;
    String classList;


    public Courses ()
    {
        String[] studentArray = new String[11];
        studentArray[0] = "CSCI 0066";
        studentArray[1] = "CHEM 003B";
        studentArray[2] = "HUM 0002";
        studentArray[3] ="MATH 0032"; 
        studentArray[4] = "CHEM 003Y";
        studentArray[5] = "MATH 0031";
        studentArray[6] = "CSCI 0026";
        studentArray[7] = "PHYS 0105L"; 
        studentArray[8] = "PHYS 0105";
        studentArray[9] = "CSCI 0013";
        studentArray[10] = "ENGL 001C";
        next = 0;
    }

    public String displayCourses()
    {
        for (int i = 0; i < studentArray.length; i++)
        {
            classList = studentArray[i];
        }
      return classList;
    }

}

6 个答案:

答案 0 :(得分:3)

尝试打印而不是覆盖并返回:

  public void displayCourses(){
    for (int i = 0; i < studentArray.length; i++){
        System.out.println(studentArray[i]);
    }
 }

如@GhostCat所述,直接打印是不好的做法,因此创建一个字符串并将所有数据附加到其中然后返回如下:

String s = "";
public String displayCourses(){
    for (int i = 0; i < studentArray.length; i++){
        s += studentArray[i] + "\n";
    }
    return s;
 }

这也可以使用StringBuffer(同步)或StringBuilder(异步)来完成。

如@Shashwat所述,使用StringBuilder会更有效,如下所示:

StringBuilder sb = new StringBuilder();
public String displayCourses(){
    for (int i = 0; i < studentArray.length; i++){
        sb.append(studentArray[i]+"\n");
    }
    return sb.toString();
 }

使用StringBuffer

StringBuffer sb = new StringBuffer();
public String displayCourses(){
    for (int i = 0; i < studentArray.length; i++){
        sb.append(studentArray[i]+"\n");
    }
    return sb.toString();
 }

正如@MadProgrammer所建议的那样,这也可以使用StringJoiner

来完成
StringJoiner sj = new StringJoiner("\n");
public String displayCourses(){
   for (int i = 0; i < studentArray.length; i++){
       sj.add(studentArray[i]);
   }  
   retunr sj.toString();
}

是的!要摆脱NullPointerException,不要在构造函数中创建一个新数组。只是初始化它。

String[] studentArray;
Course(){
    studentArray = new String[11];
    ...
    ...
}

答案 1 :(得分:1)

您的Courses构造函数实际上创建了studentArray的本地阴影,因此您应该删除String[]。此外,您可以声明您的数组内联。我还建议您覆盖toString(),而不是创建自己的返回display的方法String。假设您使用的是Java 8+,则可以使用Collectors.joining。像,

public class Courses {
    private int next;
    String[] studentArray;
    String classList;

    public Courses() {
        studentArray = new String[] { "CSCI 0066", "CHEM 003B", 
                "HUM 0002", "MATH 0032", "CHEM 003Y", "MATH 0031",
                "CSCI 0026", "PHYS 0105L", "PHYS 0105", "CSCI 0013", "ENGL 001C" };
        next = 0;
    }

    @Override
    public String toString() {
        return Arrays.stream(studentArray).collect(Collectors.joining(", "));
    }
}

答案 2 :(得分:0)

在您的显示方法中,您可以使用Java stringbuilder添加所有值并以字符串

返回

答案 3 :(得分:0)

简单的方法:使用+ =来连接结果字符串:

classList += 

在那个for循环中。但是,当然,更有效的方法是使用StringBuilder。

或者使用Arrays类中的内置方法将数组转换为String。

记录:

  • 方法名称printClasses()表示此方法打印数组内容。在这种情况下:只打印每一行。
  • 或者将方法重命名为getClassesAsString(),例如表示该方法应该做什么。

答案 4 :(得分:0)

使用String#join

public String displayCourses()
{
    return String.join("\n", Arrays.asList(studentArray)); //could use Arrays.toString too
}

但是,在构造函数中,您创建了另一个名为studentArray的数组,该数组覆盖了原始数组,导致NullPointerException所以,执行

public Courses ()
{
   studentArray = new String[11];
   //..rest of the code

答案 5 :(得分:0)

public class ONE {

    private int next;
    String[] studentArray;
    String classList = null;
    String d = null;

    public void Courses() {
        String[] studentArray = new String[11];
        studentArray[0] = "CSCI 0066";
        studentArray[1] = "CHEM 003B";
        studentArray[2] = "HUM 0002";
        studentArray[3] = "MATH 0032";
        studentArray[4] = "CHEM 003Y";
        studentArray[5] = "MATH 0031";
        studentArray[6] = "CSCI 0026";
        studentArray[7] = "PHYS 0105L";
        studentArray[8] = "PHYS 0105";
        studentArray[9] = "CSCI 0013";
        studentArray[10] = "ENGL 001C";
        for (int i = 0; i < studentArray.length; i++) {
            classList = studentArray[i];
            System.out.println("---->" + classList);
        }
    }

    public static void main(String[] args) {
        ONE o = new ONE();
        o.Courses();
    }
}