2017-05-14 13 views
1

特定の文字列値を保持する配列を作成するクラスを作成しようとしています。また、配列値を表示する同じクラスにメソッドを作成したいと考えています。ここで上書きして返すのではなく、印刷してみてください、私がこれまで持っているもの文字列の配列を表示するメソッドを作成する方法

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

} 
+2

'return Arrays.toString(studentArray); ' –

+0

これはコンパイルされますが、このメソッドを使用するとnullpointerEceptionを受け取るのですか? –

+0

@NickEspinoこれはコンストラクタで新しい配列を作成するためです。代わりに 'studentArray = new String [11];'を実行してください。あなたに問題があるなら、私のまたはエリオットの答えを見てください。 –

答えて

1

あなたCoursesコンストラクタは、実際にstudentArrayの局所的な影を作成しますので、あなたはString[]を削除する必要があります。また、配列をインラインで宣言することもできます。また、自分自身のメソッドdisplayを作成するのではなく、Stringを返す代わりに、toString()を上書きすることをお勧めします。 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(", ")); 
    } 
} 
+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(非同期)を使用してもを行うことができます。

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

をそしてStringBuffer使用:@MadProgrammerによって示唆されるように

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

が、これがまた、使用して行うことができます@Shashwatで述べたように、次のよう

が、これは、StringBuilderを使用して、より効率的になります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を取り除くには、コンストラクタで新しい配列を作成しないでください。ちょうどそれを初期化してください。その結果の文字列をCONCATするために+ =を使用します:

以内
classList += 

あなたが簡単な方法を、すべての値を追加し、文字列

+1

悪いアドバイス。ダイレクト印刷はここで修正されています。実際に文字列を返す方が良い。私はあなたが本当に質問のポイントを見逃していると思う。 – GhostCat

+0

@GhostCat編集を参照してください。 'String'を使う代わりに、' StringBuilder'を使って@ Kaushal28 @ – Kaushal28

+0

がより効率的になります。 –

0

それはforループです。もちろん、より効率的なアプローチは、代わりにStringBuilderを使用することです。

配列を文字列に変換する配列クラスの組み込みメソッドを使用することもできます。

とレコードのために:

  • メソッド名printClasses()このメソッドは、配列の内容を出力することを意味します。その場合は、各行を印刷してください。
  • 代わりに、メソッドの名前をgetClassesAsString()に変更して、メソッドが何をすべきかを表現します。
0

として返すためのJavaのStringBuilderを使用することができ、あなたの表示方法において

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

使用しかしString#join

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

、コンストラクタでは、あなたが別の配列を作成し、実行し、そうNullPointerExceptionを起こし、元の1を曇らせるれ、studentArrayと呼ば

public Courses() 
{ 
    studentArray = new String[11]; 
    //..rest of the code 
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(); 
    } 
} 
関連する問題