我知道“如何从String转换为char?”已被问过很多次,但我不知道为什么这对我的项目来说是一个问题,因为我不认为我正在尝试将字符串转换为字符串。
这是我的代码:
private void BtnAddClientActionPerformed(java.awt.event.ActionEvent evt) {
try {
ArrayList<Cliente> clientes = ClienteDataSer.LoadData();
Cliente C = new Cliente();
JOptionPane.showMessageDialog(null, "reading: dni");
C.setDni(Integer.parseInt(TxTDni.getText()));
JOptionPane.showMessageDialog(null, "reading: nombre");
C.setNombre(TxTNombre.getText());
JOptionPane.showMessageDialog(null, "reading: apellido");
C.setApellido(TxTApellido.getText());
JOptionPane.showMessageDialog(null, "reading: sexo");
C.setSexo(TxTSexo.getText()); //<--- error: "Incopatible types:String cannot be converted to char
JOptionPane.showMessageDialog(null, "reading: edad");
C.setEdad(Integer.parseInt(TxTEdad.getText()));
JOptionPane.showMessageDialog(null, "Se añade a la tabla clientes");
clientes.add(C);
JOptionPane.showMessageDialog(null, "Se guarda");
ClienteDataSer.saveData(clientes);
JOptionPane.showMessageDialog(null, "Se corre el metodo llenartablaclientes");
llenarTablaClientes();
JOptionPane.showMessageDialog(null, "Hecho");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Faltan campos por llenar");
}
}
(多个消息对话框只是调试语句,以查看程序失败的位置。)
以下是来自TxTSexo.getText()
课程的摘录:
public char getSexo() {
return sexo;
}
public void setSexo(char sexo) {
if (this.sexo == 'M'|| this.sexo == 'm'|| this.sexo == 'f'|| this.sexo == 'F')
this.sexo = sexo;
}
我已经尝试过转换为String但它再次说错误。
如果有人想在这里阅读整个项目的是link,也许你可以用它来做其他事情。
答案 0 :(得分:2)
所涉及的类的sexo
属性具有类型char
。 TxTSexo.getText()
会返回String
。这些不是一回事,它们之间没有自动转换。您需要自己执行合适的转换才能使用TxTSexo.getText()
设置sexo
属性的值。
如果你可以依靠TxTSexo.getText()
总是返回一个非null
字符串,其中只包含一个字符,或者包含所需字符作为第一个字符,那么你可以简单地使用C.setSexo(TxTSexo.getText().charAt(0))
。
如果您需要TxTSexo.getText()
null
或空白或包含前导空格,那么您可以改为
char sexoChar;
try {
sexoChar = TxTSexo.getText().trim().charAt(0);
} catch (NullPointerException | IndexOutOfBoundsException e) {
sexoChar = ' ';
}
C.setSexo(sexoChar);
您可能希望执行进一步的验证或转换。