-1

私はこのプログラムを何時間も見つめてきましたが、おそらく別の視点が役立つでしょう.

import java.util.Arrays;
import java.util.Random;

public class Examples

{
private int numbers[]; 
private String result;

     public Examples()
        {
     numbers = new int[10];
         Arrays.fill(numbers, 42);
        } 

        public Examples(int[] array)
        {
        numbers = Arrays.copyOf(array, array.length);
        }


 public void setNumbers (int numbers) 
    {                                           
    this.numbers = new int[numbers];
    }
 public int [] getNumbers()
 {                                      
    return numbers;
 }



public  String toString()
{
    String result = new String();
    int i;                                  
    for (i = 0; i < numbers.length; i++)
        result = numbers + "\t";
        return result;
}

整数を格納するクラスを作成し、提供されている static void main メソッドに応じて特定の出力を出力することになっています。私が現在取り組んでいるのは、

{
   public static void main( String [] args )
   {
      int i;
      FunkyNumbers funNumbers, moreFun;

      System.out.println("FunkyClientA:");
      System.out.println("Test default constructor and toString method");
      System.out.println();

      funNumbers = new FunkyNumbers();
      System.out.println("toString result from funNumbers:");
      System.out.println( funNumbers.toString() );
      System.out.println();

      moreFun = new FunkyNumbers();
      System.out.println("toString result from moreFun:");
      System.out.println( moreFun.toString() );

   } // end of method main

} //

結果は Test default コンストラクターと toString メソッドであるはずです

funNumbers からの toString 結果: 42 42 42 42 42 42 42 42 42 42

moreFun からの toString 結果: 42 42 42 42 42 42 42 42 42 42

ただし、デフォルトのコンストラクターと toString メソッドをテストします

funNumbers からの toString 結果: [I@6e1408

moreFun からの toString 結果: [I@e53108

4

3 に答える 3

2

result問題:追加ではなく、常に新しい値を割り当てています。

次のように使用することをお勧めしますStringBuilder

    StringBuilder result = new StringBuilder();
    for (int i = 0; i < numbers.length; i++)
        result.append(numbers + "\t");
    return result.toString();

使いたくないStringBuilder場合

    String result = new String();
    for (int i = 0; i < numbers.length; i++)
        result = result + numbers + "\t";//append in result
    return result;

また、メソッドがFunkyNumbersクラスで使用可能であることを確認してください。そこでアクセスできない場合は、そこに移動/コピーします。

于 2012-11-07T21:42:34.720 に答える
1

試す

        result += numbers[i] + "\t";

あなたのToString()方法で

クラスにコードを含めてくださいFunkyNumbers。より良いフィードバックを提供できるかもしれません。

于 2012-11-07T21:39:13.957 に答える
0

Javaの配列はオブジェクトです。したがって、変数funNumbersには、値として配列ではなく、配列が配置されているメモリ内のアドレスを指す参照があります。使用するときtoString()は、配列を文字列としてではなく、このメモリアドレスを画面に出力します。StringBuffer代わりに、配列を文字列に「変換」するために使用する必要があります。

private static String convertArrayToString(int[] a) {
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<a.length; i++)
            sb.append(a[i]);
        return sb.toString();
    }

Arrays.toString(arg)配列を文字列に「変換」するために使用することもできます。引数として配列を指定すると、配列の文字列表現が返されます。配列が多次元の場合は、Arrays.deepToString(arg)代わりに使用してください。

于 2012-11-07T21:48:49.573 に答える