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

此方法通过比较它们的属性来检查两个对象是否相同。

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()-Method 构造了两个新对象,然后我们尝试打印它们并做一些其他的事情。除了印刷,一切都很好。

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;

是你的问题。您正在铸造并分配一个intto char... 这意味着您现在在您的字符集中具有该整数值的任何字符。在您的情况下...没有具有该值的可打印字符,因此您会得到“小方块”(在不同的终端中,您可能会看到问号)。

为了更好地说明,试试这个:

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

如果您使用 UTF-8 或其他包含 US-ASCII 的字符集,您会看到:

一个

因为65AASCII 中的值(参见:http ://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters )

不要那样做。删除这些行,并获取整数的文本表示,这将在使用字符串连接时自动发生:

String Beschreibung = x + "," + y;

还有其他方法可以做到这一点(例如String.valueOf()and String.format()),但这是最简单的。

(另外,变量名不要大写。Java 中的变量应该是驼峰式并以小写开头。)

于 2013-06-29T20:59:31.897 回答
2

您不能像您尝试的那样从数字转换为字符,因为您将看到的只是数字的 ASCII 表示,这不是您想要的。相反,为什么不让 String 为您完成繁重的工作String.format(...)

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 回答