Faça um programa em Java no qual o usuário possa escolher a opção desejada; Converter Binário em Decimal, Decimal em Binário ou sair. Que o usuario possa repetir ate desejar sair. (trabalhe com numeros binários e decimais).
Código Java
//Autor: Thiago Campos
//Data: 02.05.2012
//Programa que converte um numero decimal/binário ou
binário/decimal
import
javax.swing.JOptionPane;
/**
*
* @author Thiago
*/
public
class Converte {
public static void main(String[] args) { //inicio do método main
//declaração
de variaveis
int num[] =
new int[100]; //BD criação
do vetor tipo inteiro
int resultado
= 0, bin = 0, ver = 0; //BD variaveis inteiro
String binario; //BD variavel String
float numero; //DB
var do tipo real
int resto; //DB
var do tipo inteira
int q[] = new int[100]; //DB
vetor quociente
String sequencia = "",
seqBinaria = ""; //DB Strings inicializadas
int menu; //variavel
do menu
do{
menu =
Integer.parseInt(JOptionPane.showInputDialog(" Trabalho de Thiago Campos\n\nMENU DE
OPÇÕES\n1 - Converte de Binário para Decimal"
+ "\n2
- Converte de Decimal para Binário\n3 - Sair"));
//Escolha do menu
switch(menu){
case
1:
//INICIO
- CONVERTE DE BINÁRIOS PARA DECIMAL
//entrada de dados - saida dos dados - Usando uma Janela grafica
JOptionPane
binario =
JOptionPane.showInputDialog("Informe o numero binário:");
//Validação
for (int i =
0; i < binario.length(); i++) {
//verifica
se o numero é binario
if (binario.charAt(i) < 48 ||
binario.charAt(i) > 49) {
//saida dos
dados - Usando uma Janela grafica JOptionPane
JOptionPane.showMessageDialog(null, "Operação Inválida!");
ver = 1; // variavel
verificadora
break;
}
} //fim
da validação
if (ver == 0) {
for (int i = 0; i <
binario.length(); i++) {
//recebe o
caracter 0 ou 1, mas entende que o correspondente inteiro é 48 ou 49
bin =
binario.charAt(i);
//se o valor for 48 atribui ao vetor 0
if
(bin == 48) {
num[i] = 0;
}
//se o valor for 48 atribui ao vetor 1
if
(bin == 49) {
num[i] = 1;
}
//formula que
resultado = num[i] + 2 * resultado;
} //fim
do for
//saida dos dados - Usando uma Janela grafica JOptionPane
JOptionPane.showMessageDialog(null, "O número decimal
correspondente é: " + resultado);
resultado =0; // Zera a variavel para o proximo uso
resultado =0; // Zera a variavel para o proximo uso
} //fim
do If
//FIM -
CONVERTE DE BINÁRIOS PARA DECIMAL
break;
case
2:
//INICIO
- CONVERTE DE DECIMAL PARA BINÁRIOS
//Entrada de dados - var recebento a String convertida em Float
numero =
Float.parseFloat(JOptionPane.showInputDialog("Informe o numero
decimal:"));
//processamento: convertendo decimal
while (numero
> 0) { //faça
enquanto o numero for maior que zero
int i =
0; //inicializando
a var local
resto =
(int) numero % 2; //var
assumindo o resto da divisão
q[i] = (int) (numero / 2); //O vetor recebe a parte inteira da divisão
numero =
q[i]; //a var
assumindo novo numero = quociente da divisão
sequencia
+= resto; //var
sequencia concatenando o resto das divisões
i++; //incrementando a var local
}
//Loop
para inverter os caracteres da String sequencia
for (int j = sequencia.length() - 1;
j >= 0; j--) {
seqBinaria = seqBinaria +
sequencia.charAt(j); //var que concatena o resultado
} // fim do FOR
//janela
que mostra a sequencia binaria correspondente
JOptionPane.showMessageDialog(null,"O correspondente binário é
"+seqBinaria);
//Esses 2 comandos abaixos vão zerar as variaveis e deixa-los prontos para novo uso
seqBinaria = "";
sequencia = "";
//Esses 2 comandos abaixos vão zerar as variaveis e deixa-los prontos para novo uso
seqBinaria = "";
sequencia = "";
//FIM -
CONVERTE DE DECIMAL PARA BINÁRIOS
break;
case 3:
JOptionPane.showMessageDialog(null, "Saindo do programa.");
break;
default: //Retorno
da opção invalida
JOptionPane.showMessageDialog(null, "Opção Inválida!");
} //fim
do Switch
}while(menu !=
3); //Condição para sair do programa
} //fim
da Main
} //fim da Classe
quando eu faço o calculo a 1° vez ele retorna o valor correto da conversão mais quando eu faço a segunda ele começa a da valor errado tipo de binário pra dec 10 = 2 depois se eu faço de novo 10 vai da = 10 por que ?
ResponderExcluirOlá amigo, obrigado pela observação. O erro ocorre porque a variável "resultado" precisa ser zerada pois, após o primeiro uso, passa a guardar valores.
ExcluirPortanto experimenta por "resultado = 0;" após "JOptionPane.showMessageDialog(null, "O número decimal correspondente é: " + resultado);" no final da conversão de binario para decimal.
Não tive tempo de efetuar os testes, mas creio que funcione. Um abço.
ok esse problema foi resolvido, mais o de decimal pra binaria esta da mesma forma como devo corrigir esse erro, desde já agradeço pela sua atenção; e pesquisando sobre o assunto o seu blog é o único canto que fala sobre o mesmo, obrigado
ResponderExcluirOlá, acredito que o problema seja resolvido da mesma forma que o anterior, basta zerar a variavel "seqBinaria", uma vez que ao utiliza-la pela segunda vez, os novos valores somam aos ja existentes. Experimenta por "seqBinário = 0;" após "JOptionPane.showMessageDialog(null,"O correspondente binário é "+seqBinaria);".
ExcluirPode continuar acessando e tirando dúvidas, ou até mesmo corrigindo algumas falha...rs!
Agradeço mais uma vez e boa sorte nos estudos!
Infelizmente não deu certo esse método,
ResponderExcluirele não recebe "0" pois é uma String segundo o ero do código
Já retifiquei.
ExcluirForma correta: seqBinaria = "";
outra pergunta tem como eu fazer essas conversões sem utilizar vetores ?
ResponderExcluirAmigo, infelizmente não sei te responder, pois nunca tentei.
ExcluirAcredito que sim, mas utilizando um código mais avançado. Estes são bem básicos.
seqBinaria = ""; Não deu certo coloquei esse comando JOptionPane.showMessageDialog(null,"O correspondente binário é "+seqBinaria);
ResponderExcluirseqBinaria = "";
mais não deu certo caso tenha outra solução fico no aguardo
abraço
Anônimo a solução é:
Excluir//Esses 2 comandos abaixos vão zerar as variaveis e deixa-los prontos para novo uso
seqBinaria = "";
sequencia = "";
Dessa vez, tive o trabalho de testa-la e garanto que deu certo.
Um abraço!
agora sim deu tudo certo, mais olha sem duvidas agradeço pelas duvidas tiradas e pela atenção em tentar ajudar ao próximo
ResponderExcluirpor enquanto, vou parar de fazer perguntas kkkkkkkkk
mais no seu blog tem muita coisa boa e vou olhar cada material abraço e obrigado
Obrigado, é satisfatório ter o trabalho reconhecido. A ideia de ajudar o próximo é boa e deve ser compartilhada. Espero que todos que de alguma forma foram ajudados por este blog, ajudem a alguém mais na frente. São quase 40 mil acesso por todo o mundo, se pelo menos a metade fizer o mesmo, teremos contribuído para um mundo melhor.
ExcluirFique a vontade para perguntar, não sei de muita coisa, hoje me considero mais um amante da programação. Se eu não souber, te falo ou pesquiso uma alternativa de resposta.
Fique com Deus e bons estudos!