Galera estou com um problema na lógica do meu programa e até então não consegui uma solução abaixo o trecho do problema:
[code]
codigo = (String)cbx_EmAtendimento.getSelectedItem(); // o item selecionado vira String
if (cbx_EmAtendimento.getSelectedItem()!= null)
{
int i = 5; // representa 99.999 em inteiro no substring
boolean inteiro = false; // supondo que o id pegado seja false
while(inteiro == false)
{
id = Integer.parseInt(codigo.substring(0,i)); //pega os 5 primeiros caracteres
if (id / id == 1){//se o id for divisivel por ele mesmo e um numero inteiro entao retorne true
inteiro = true; // sai do loop while
}
i--; // se nao diminua um do i pra usar no substring
}
}[/code]
o seguinte erro é dado
[code]
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “14 =>”
at java.lang.NumberFormatException.forInputString(Unknown Source)
Ele pega os 5 primeiros caracteres 14 =>
minha intenção era que mesmo com o erro dado no if de ele ser uma String, ele continuasse no loop do while até pegar o número 14…
aceito várias sujestões
Estou fazendo um mini programa de abertura de chamados ta ficando legalzin hehhee…
[quote=tiagotgd29]Galera estou com um problema na lógica do meu programa e até então não consegui uma solução abaixo o trecho do problema:
codigo = (String)cbx_EmAtendimento.getSelectedItem(); // o item selecionado vira String
if (cbx_EmAtendimento.getSelectedItem()!= null)
{
int i = 5; // representa 99.999 em inteiro no substring
boolean inteiro = false; // supondo que o id pegado seja false
while(inteiro == false)
{
id = Integer.parseInt(codigo.substring(0,i)); //pega os 5 primeiros caracteres
if (id / id == 1){//se o id for divisivel por ele mesmo e um numero inteiro entao retorne true
inteiro = true; // sai do loop while
}
i--; // se nao diminua um do i pra usar no substring
}
}
o seguinte erro é dado
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "14 =>"
at java.lang.NumberFormatException.forInputString(Unknown Source)
Ele pega os 5 primeiros caracteres 14 =>
minha intenção era que mesmo com o erro dado no if de ele ser uma String, ele continuasse no loop do while até pegar o número 14...
aceito várias sujestões :D
Estou fazendo um mini programa de abertura de chamados ta ficando legalzin hehhee....
[/quote]
Olá, é bem facil de entender, veja:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "14 =>"
at java.lang.NumberFormatException.forInputString(Unknown Source)
você esta tentando converter da posição 0 até a 5 o valor
ou seja, você nao pode converter dados que nao sejam integer, o erro esta exatamente na linha 10 do seu codigo
nel, não fui muito claro vou tentar explicar melhor
eu tenho um JComboBox que exibe uma lista de funcionarios que estão em atendimento
Eu deixei a lista pra vir assim
id => data | usuario | departamento | resumo | problema
onde ficaria assim
14 => 21 de fevereiro de 2012 | tiago | TI | teste | software
eu preciso pegar o 14 para ou qualquer numero que apareça no id, pois nele eu uso de base para buscar no bando de dados e setar as informações na tela…
o código do JComboBox que funcionava antes era assim:
String codigo = "";
int id = 0;
codigo = (String)cbx_EmAtendimento.getSelectedItem(); // o item selecionado vira String
if (cbx_EmAtendimento.getSelectedItem()!= null)
{
id = Integer.parseInt(codigo.substring(0,2));
try {
String sql = "SELECT * FROM ocorrencias WHERE id = "+id;
manu.st = manu.connection.createStatement();
manu.rs = manu.st.executeQuery(sql);
if (manu.rs.next())
{
tx_Contato.setText(manu.rs.getString("contato"));
tx_Data_Resgistrada.setText(manu.rs.getString("data"));
tx_Depart.setText(manu.rs.getString("departamento"));
tx_Problema.setText(manu.rs.getString("problema"));
tx_Ramal.setText(manu.rs.getString("ramal"));
tx_Resumo.setText(manu.rs.getString("resumo"));
tx_Status.setText(manu.rs.getString("status"));
tx_Solicitante.setText(manu.rs.getString("solicitante"));
txa_Desc.setText(manu.rs.getString("descricao"));
tx_Cod.setText(manu.rs.getString("id"));
lbl_ApareceNome.setText(manu.rs.getString("responsavel"));
}
}catch(SQLException erro){
erro.printStackTrace();
}
}
else
{
tx_Contato.setText("");
tx_Data_Resgistrada.setText("");
tx_Depart.setText("");
tx_Problema.setText("");
tx_Ramal.setText("");
tx_Resumo.setText("");
tx_Status.setText("");
tx_Solicitante.setText("");
txa_Desc.setText("");
tx_Cod.setText("");
lbl_ApareceNome.setText("");
}
}
});
só que ele pegaria os dois primeiros valores ou seja de 10 a 99
quando aparecesse um funcionario em atendimento com o codigó 2 ou 112
daria erro …
ai eu tente implementar esse while:
String codigo = "";
int id = 0;
codigo = (String)cbx_EmAtendimento.getSelectedItem(); // o item selecionado vira String
if (cbx_EmAtendimento.getSelectedItem()!= null)
{
int i = 5; // representa 99.999 em inteiro no substring
boolean inteiro = false; // supondo que o id pegado seja false
while(inteiro == false)
{
id = Integer.parseInt(codigo.substring(0,i)); //pega os 5 primeiros caracteres
if (id / id == 1){//se o id for divisivel por ele mesmo e um numero inteiro entao retorne true
inteiro = true; // sai do loop while
}
i--; // se nao diminua um do i pra usar no substring
}
try {
String sql = "SELECT * FROM ocorrencias WHERE id = "+id;
manu.st = manu.connection.createStatement();
manu.rs = manu.st.executeQuery(sql);
if (manu.rs.next())
{
tx_Contato.setText(manu.rs.getString("contato"));
tx_Data_Resgistrada.setText(manu.rs.getString("data"));
tx_Depart.setText(manu.rs.getString("departamento"));
tx_Problema.setText(manu.rs.getString("problema"));
tx_Ramal.setText(manu.rs.getString("ramal"));
tx_Resumo.setText(manu.rs.getString("resumo"));
tx_Status.setText(manu.rs.getString("status"));
tx_Solicitante.setText(manu.rs.getString("solicitante"));
txa_Desc.setText(manu.rs.getString("descricao"));
tx_Cod.setText(manu.rs.getString("id"));
lbl_ApareceNome.setText(manu.rs.getString("responsavel"));
}
}catch(SQLException erro){
erro.printStackTrace();
}
}
else
{
tx_Contato.setText("");
tx_Data_Resgistrada.setText("");
tx_Depart.setText("");
tx_Problema.setText("");
tx_Ramal.setText("");
tx_Resumo.setText("");
tx_Status.setText("");
tx_Solicitante.setText("");
txa_Desc.setText("");
tx_Cod.setText("");
lbl_ApareceNome.setText("");
}
}
});
pra tentar pegar o valor certo do id não importando o tamanho que aparecesse…
espero que tenham entendido pois n sou muito bom pra explicar rssss
[quote=tiagotgd29]Galera estou com um problema na lógica do meu programa e até então não consegui uma solução abaixo o trecho do problema:
[code]
codigo = (String)cbx_EmAtendimento.getSelectedItem(); // o item selecionado vira String
if (cbx_EmAtendimento.getSelectedItem()!= null)
{
int i = 5; // representa 99.999 em inteiro no substring
boolean inteiro = false; // supondo que o id pegado seja false
while(inteiro == false)
{
id = Integer.parseInt(codigo.substring(0,i)); //pega os 5 primeiros caracteres
if (id / id == 1){//se o id for divisivel por ele mesmo e um numero inteiro entao retorne true
inteiro = true; // sai do loop while
}
i--; // se nao diminua um do i pra usar no substring
}
}[/code]
o seguinte erro é dado
[code]
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “14 =>”
at java.lang.NumberFormatException.forInputString(Unknown Source)
Ele pega os 5 primeiros caracteres 14 =>
minha intenção era que mesmo com o erro dado no if de ele ser uma String, ele continuasse no loop do while até pegar o número 14…
aceito várias sujestões
Estou fazendo um mini programa de abertura de chamados ta ficando legalzin hehhee…[/quote]
se você quer que continue “loopando” mesmo que de o erro, coloque um bloco try catch na linha que você chama o parseInt, onde da o erro, isso seria chamado de “tratar o erro”.
qualquer número dividido por ele mesmo vai resultar 1, sempre, isso é matemática mesmo, não tenho certeza se você fez o que queria fazer no if…
“se” a variável que tem esse número é um int, então esse número sempre vai ser um inteiro, mas se você quisesse saber se determinado número é inteiro então você poderia converter esse número para double, dividir por um double com valor 1 e ver se o resultado é igual a 0… é importante você usar duas variáveis de um tipo ponto flutuante, nesse caso o double nesta operação por que senão você não terá a parte fracionária. Não vejo onde isso entraria na sua lógica peloq ue entendi…
Isto é uma lista que pode conter varios valores
este é de exemplo:
14 => 21 de fevereiro de 2012 | tiago | TI | teste | software
os valores são diferente apenas continuam constantes as String que concatenei ex:
=> | | |
Depois que eu tenho o valor na lista do combobox eu transformo em String e tento pegar o primeiro valor que é o ID no caso deste ai é o 14 mais poderia ser qualquer outro numero =)
Cara, eu entendi o que voce está querendo fazer…isso tem moh cheiro de gambiarra!!rsrsrs
eu fazia dessa maneira, eu concatenava o ID na minha combobox e depois pegava via substring
antes de colocar o ID na combobox, eu primeiro verificava o seguinte
qual o tamanho do ID?
se for um, coloque um: 0001 (tres zeros)
se for dois, coloque um: 0016 (dois zeros)
assim por diante
mas isso é um…errrr…artificio…hehehe
então eu pesquisando, fiz dessa maneira:
maior_abandonado, a gente ta começando a se entender rss… entao se eu colocar o try catch na onde eu converto com parseint ele ainda vai continua no loop do while mesmo com o erro do if ?
então minha lógica é essa suponha que o a string codigo seja está:
14 => 21 de fevereiro de 2012 | tiago | TI | teste | software
pegando os 5 primeiros caracteres eu teria 14 =>
ai o loop ira decrecendo 1 até chegar a 14/14 = 1 … ai seria true…
[quote=tiagotgd29]Isto é uma lista que pode conter varios valores
este é de exemplo:
14 => 21 de fevereiro de 2012 | tiago | TI | teste | software
os valores são diferente apenas continuam constantes as String que concatenei ex:
=> | | |
Depois que eu tenho o valor na lista do combobox eu transformo em String e tento pegar o primeiro valor que é o ID no caso deste ai é o 14 mais poderia ser qualquer outro numero =)[/quote]
Veja o que eu fiz de acordo com o que entendi e se supri sua necessidade:
String s = "14 => 21 de fevereiro de 2012 | tiago | TI | teste | software";
int index = s.indexOf("=>");
String id = s.substring(0, index);
System.out.println(id);
Imprimiu: 14
Esse código é independente do tamanho do ID, vai simplesmente pegar qualquer coisa que venha antes de ‘=>’.
Abraços.