001 import java.util.Scanner;
002 /**
003 Esta é o aperfeiçoamento do código do Conversor2. Converter as variáveis
004 globais em locais pelo critério de uso: o que é usado somente em um
005 método deve ser local ao método.
006 */
007
008 public class Conversor3 {
009 static int num10; // numero base 10 - destruido na conversao
010 static String num12; // numero base 12;
011 static Scanner sc=new Scanner (System.in); // leitor de teclado
012
013 /**
014 Este é o ponto de entrada do programa: o método que é invocado
015 pela JVM.
016 Pergunta ao usuário que conversor ele deseja usar e invoca
017 o método que faz a conversão. Permite também que o usuário
018 termine o programa e que refaça a escolha caso tenha digitado
019 uma opção que não existe.
020 */
021 public static void main (String[] args){
022 int opt=0; // opcao de conversao - usada somente neste método.
023 do {
024 System.out.println ("1 para 10->12; 2 para 12->10; 3 para sair");
025 System.out.println ("(inteiros - tipo diferente dá pau.)");
026 opt=sc.nextInt();
027 switch (opt) {
028 case 1: // 10->12;
029 dez2doze(); // invocação do método
030 break;
031 case 2: // 12->10;
032 doze2dez(); // invocação do método
033 break;
034 case 3: break;
035 default:
036 System.out.println ("Digite novamente.");
037 }
038 } while (opt!=3);
039 }
040
041 /** Esta é a declaração, ou definição do método. Dizemos como deve
042 ser a invocação (a assinatura do método) e o que ele deve fazer
043 (o bloco de código do método).
044 Este método pergunta ao usuário o valor inteiro na base 10 que
045 o usuário deseja converter, converte-o para um String que
046 representa o número na base 12 e o escreve na tela.
047 A conversão é feita por divisões sucessivas.
048 */
049 public static void dez2doze () {
050 int m; // digito para conversor 10->12 - usado somente neste método
051 System.out.println ("Digite o número decimal.");
052 System.out.println ("(inteiros - tipo diferente dá pau.)");
053 num10=sc.nextInt();
054 num12="";
055 while (num10>0) {
056 m=num10%12;
057 num10/=12;
058 switch (m) {
059 case 0:
060 num12='A'+num12;
061 break;
062 case 1:
063 num12='B'+num12;
064 break;
065 case 2:
066 num12='C'+num12;
067 break;
068 case 3:
069 num12='D'+num12;
070 break;
071 case 4:
072 num12='E'+num12;
073 break;
074 case 5:
075 num12='F'+num12;
076 break;
077 case 6:
078 num12='G'+num12;
079 break;
080 case 7:
081 num12='H'+num12;
082 break;
083 case 8:
084 num12='I'+num12;
085 break;
086 case 9:
087 num12='J'+num12;
088 break;
089 case 10:
090 num12='K'+num12;
091 break;
092 case 11:
093 num12='L'+num12;
094 break;
095 default:
096 System.out.println ("Erro desconhecido.");
097 }
098 }
099 System.out.println ("Resultado:" + num12);
100 }
101
102 /**
103 Este método pergunta ao usuário o valor na base 12 que
104 o usuário deseja converter, recebe-o como String, converte-o em
105 número inteiro na base 10 e o escreve na tela.
106 A conversão é feita por soma de produto do dÃgito por potência.
107 */
108 public static void doze2dez () {
109 /*i, c, numErr, len são usados somente neste método. */
110 int i; // contador para conversor 12 ->10
111 char c; // caracter corrente para conversor 12->10
112 boolean numErr; // flag de erro no numero base 12
113 int len;// comprimento do número base 12
114
115 System.out.println ("Digite o número base 12.");
116 num12=sc.next();
117 len=num12.length();
118 numErr=false;
119 num10=0;
120 i=0;
121 while ((i<len)&&(!numErr)){
122 c=num12.charAt(i);
123 i++;
124 num10*=12;
125 switch (c) {
126 case 'A':
127 num10+=0;
128 break;
129 case 'B':
130 num10+=1;
131 break;
132 case 'C':
133 num10+=2;
134 break;
135 case 'D':
136 num10+=3;
137 break;
138 case 'E':
139 num10+=4;
140 break;
141 case 'F':
142 num10+=5;
143 break;
144 case 'G':
145 num10+=6;
146 break;
147 case 'H':
148 num10+=7;
149 break;
150 case 'I':
151 num10+=8;
152 break;
153 case 'J':
154 num10+=9;
155 break;
156 case 'K':
157 num10+=10;
158 break;
159 case 'L':
160 num10+=11;
161 break;
162 default:
163 System.out.println ("Erro dÃgito não corresponde a número.");
164 numErr=true;
165 }
166 }
167 if (!numErr) System.out.println ("Resultado:" + num10);
168 }
169
170 }
|
Nenhum comentário:
Postar um comentário