我必须在JavaFX中编写一个应用程序,它使用三个文本字段在二进制,十六进制和十进制数之间进行转换。我设法做了所需的布局,应用程序执行它应该做的事情,但我使用了禁止的预定义方法(Integer.toHexString等)。我只把它作为原型,所以既然我知道其他一切都没问题,我怎么能在没有这些方法的情况下继续进行转换呢?
这是代码的一部分,其中t1,t2和t3分别是十进制,十六进制和二进制的文本字段。
编辑:好的,所以我设法搞清楚了!我只有一个小问题:在二进制字段中,我不知道如何将输入限制为仅0或1.为了简单起见,我只复制了第三个文本字段的代码。编辑2:我在某种程度上得到了它,但它并不适用于所有情况。如果数字以1以外的数字开头,它仍然会转换它。它在某些情况下会中断,所以我猜它是部分正确的。有人可以帮忙吗?
t3.setOnKeyPressed(e -> {
if (e.getCode() == KeyCode.ENTER) {
int decimal = 0;
int power = 0;
int bin = Integer.parseInt(t3.getText());
while (bin != 0) {
if (bin % 10 > 1) {
break;
} else {//binary
int tmp = bin % 10;
decimal += tmp * Math.pow(2, power);
bin = bin / 10;
power++;
}
}
t1.setText(String.format("%d", decimal));
char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
String st = "";
while (decimal > 0) {
int y = decimal % 16;
st = hex[y] + st;
decimal = decimal / 16;
t2.setText(st);
}
}
});