0
import java.io.*;

public class Bewertung {
  int schwarze;
  int weisse;

このクラスは、属性 schwarze および weisse を持つオブジェクトを構築します。デフォルトコンストラクタ:

  public Bewertung() {
  schwarze = 0;
  weisse = 0;
  }

コンストラクタ:

  public Bewertung(int sw, int ws) {
  schwarze = sw;
  weisse = ws;
  }

文字列へのメソッド。ここに間違いがあります。このメソッドを使用してオブジェクトを渡そうとすると、端末にクレイジーなものが表示されるからです。

  public String toString() {
    int x = this.schwarze;
    int y = this.weisse;

    char x2 = (char) x;
    char y2 = (char) y;
    String Beschreibung = x2 + "," + y2;
    return Beschreibung; 
  }

このメソッドは、属性を比較して、2 つのオブジェクトが同じかどうかをチェックします。

public boolean equals(Bewertung o) {  
 if (this.schwarze == o.schwarze && this.weisse == o.weisse) {
  return true;
}
else return false;
}

このメソッドは、ターミナルで指定した属性を持つ新しいオブジェクトを作成し、正常に動作します。

public static Bewertung readBewertung() throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("Gib die Zahl fuer Schwarz ein.");
String zeile;
    int wert=0;

    zeile=br.readLine();
    int eingabe1=(new Integer(zeile)).intValue();
System.out.println("Gib die Zahl fuer Weiss ein.");
zeile=br.readLine();
    int eingabe2=(new Integer(zeile)).intValue();

Bewertung neueBewertung = new Bewertung(eingabe1, eingabe2);
return neueBewertung;

}

Main-Method: ここでは、readBewertung() メソッドを使用して 2 つの新しいオブジェクトを構築する 2 つのオブジェクトを構築し、それらを出力して他の処理を実行します。印刷以外は問題なく動作しています。

public static void main(String[] args) {
try 
{
Bewertung Bewertung1 = MeineBewertung1.readBewertung();
  System.out.println(Bewertung1.toString());
  Bewertung Bewertung2 = MeineBewertung2.readBewertung();
  System.out.println(Bewertung2.toString());
  if (Bewertung1.equals(Bewertung2)) {
  System.out.println("Die beiden Bewertungen sind identisch!");
  }
}
catch ( IOException e)
{
}


}

}

問題: 意図したように文字列にキャストされたオブジェクトの代わりに、いくつかの正方形が表示されます。何が悪いのかわかりませんが、間違いは to.String() メソッドのどこかにあるはずです。

4

2 に答える 2

4

これ:

char x2 = (char) x;
char y2 = (char) y;

あなたの問題です。to をキャストして代入しintcharいます。これは、その整数値を持つ文字セットが何であれ、その文字を持っていることを意味します。あなたの場合...その値を持つ印刷可能な文字がないため、「小さな四角」が表示されます(別の端末では疑問符が表示される場合があります)。

よりよく説明するために、これを試してください:

int a = 65;
char c = (char)a;
System.out.println(c); 

UTF-8 または最初のバイト コード ポイントに US-ASCII を含むその他の文字セットを使用している場合は、次のようになります。

はASCII65の値であるため(参照: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters )A

そうしないでください。これらの行を削除し、文字列連結を使用するときに自動的に発生する整数のテキスト表現を取得します。

String Beschreibung = x + "," + y;

これを行う方法は他にもありますが (例:String.valueOf()String.format())、これが最も簡単です。

(また、変数名を大文字にしないでください。Java の変数はキャメルケースで、小文字で始める必要があります。)

于 2013-06-29T20:59:31.897 に答える
2

表示されるのは、必要なものではない数値のASCII表現だけであるため、試しているように数値から文字に変換することはできません。String.format(...)代わりに、以下を使用して String に面倒な作業を任せてみませんか?

public String toString() {
 int x = this.schwarze;
 int y = this.weisse;

 return String.format("%d, %d", x, y);
}

また、適切な Java 命名規則を学び、使用してください。メソッドと変数は小文字で始める必要があります。

于 2013-06-29T20:57:56.230 に答える