sexta-feira, 10 de abril de 2015

0.0.0.17.8.3 - Usando particularidades da codificação de caracteres

001 import java.util.Scanner;
002 /**
003     Esta Ã© o aperfeiçoamento do código do Conversor4. 
004     Usa uma particularidade da codificação de caracteres
005     para encurtar o código.
006 */
007 
008 public class Conversor5 {
009 
010     /**
011         Este Ã© o ponto de entrada do programa: o método que Ã© invocado
012         pela JVM.
013         Pergunta ao usuário que conversor ele deseja usar e invoca
014         o método que faz a conversão. Permite também que o usuário
015         termine o programa e que refaça a escolha caso tenha digitado
016         uma opção que não existe.
017     */
018     public static void main (String[] args){
019         int opt=0// opcao de conversao - usada somente neste método.
020 
021         /* Valores não precisam sair do método. */
022         Scanner sc=new Scanner (System.in)// leitor de teclado
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 3break;
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 
052         /* Valores não precisam sair do método. */
053         int num10; // numero base 10 - destruido na conversao
054         String num12; // numero base 12;
055         Scanner sc=new Scanner (System.in)// leitor de teclado
056 
057         System.out.println ("Digite o número decimal.");
058         System.out.println ("(inteiros - tipo diferente dá pau.)");
059         num10=sc.nextInt();
060         num12="";
061         while (num10>0) {
062             m=num10%12;
063             num10/=12;
064             num12=(char)('A'+m)+num12;
065         }
066         System.out.println ("Resultado:" + num12);
067     }
068 
069     /**
070     Este método pergunta ao usuário o valor na base 12 que
071     o usuário deseja converter, recebe-o como String, converte-o em 
072     número inteiro na base 10 e o escreve na tela.
073     A conversão Ã© feita por soma de produto do dígito por potência.
074     */
075     public static void doze2dez () {
076         /*i, c, numErr, len são usados somente neste método. */
077         int i;  // contador para conversor 12 ->10
078         char c; // caracter corrente para conversor 12->10
079         boolean numErr; // flag de erro no numero base 12
080         int len;// comprimento do número base 12
081 
082         /* Valores não precisam sair do método. */
083 
084         int num10; // numero base 10 - destruido na conversao
085         String num12; // numero base 12;
086         Scanner sc=new Scanner (System.in)// leitor de teclado
087 
088         System.out.println ("Digite o número base 12.");
089         num12=sc.next();
090         len=num12.length();
091         numErr=false;
092         num10=0;
093         i=0;
094         while ((i<len)&&(!numErr)){
095             c=num12.charAt(i);
096             i++;
097             num10*=12;
098             if ((c<'A')||(c>'L')) {
099                 System.out.println ("Erro dígito não corresponde a número.");
100                 numErr=true;
101             }
102             num10+=c-'A';
103         }
104         if (!numErrSystem.out.println ("Resultado:" + num10);
105     }
106 
107 }
Java2html

Nenhum comentário:

Postar um comentário