我正在尝试编写一个构造一个包含特定字符串值的数组的类,我还想在同一个类中创建一个显示数组值的方法。这是我到目前为止所拥有的
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;
}
}
答案 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。
记录:
答案 4 :(得分:0)
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();
}
}