Qual o metodo para avaliar um carcter individual de uma String? [RESOLVIDO]

11 respostas
garotinhodejesus

o seguinte enunciado é do ultimo exercicio do meu curso.

Construa uma classe pública chamada TesteFinal1
Essa classe possui somente o método main que deve receber um String.
Da seqüência de caracteres recebidos, a aplicação deve considerar somente os caracteres 0 e 1.
Após receber a seqüência de caracteres, a aplicação deve avaliar individualmente essa seqüência da DIREITA para a ESQUERDA
(qual o metodo que devo usar para avaliar o caracter de um String de forma individual e começando da direita para a esquerda?)
para poder calcular o resultado final que deve acumular os valores segundo esses exemplos:

Entrada: 0
Processamento: (0*1)=0
Resultado a ser impresso: 0.0

Entrada: 1
Processamento: (1*1)=1
Resultado a ser impresso : 1.0

Entrada: 11
Processamento: (11) + (12)=3
Resultado a ser impresso: 3.0

e assim por diante.

eu fiz esse codigo:

import javax.swing.*;

public class Exercicio {

    public static void main(String[] args) {

        String numero;
        double resultado = 0;
        double valor = 0;

        numero = JOptionPane.showInputDialog("Digite um numero a ser calculado");
        char v[];
        v = numero.toCharArray();
        for (int i =  v.length; i >=0; i--) {
            valor = Double.parseDouble(v);
            if (valor == 0 || valor == 1) {
                valor += valor * (i + 1);

            }
            System.out.println(valor);


        }


    }
}

consigo receber o numero pelo teclado, mais não consigo fazer o resto que é pedido no enunciado.
se alguém puder me ajudar.

11 Respostas

brunobuild

garotinhodejesus,

Acho que ngm vai te dar a reposta pronta se é isso que você está esperando.

Mas vou te dar uma dica, transforma sua String em um array de char e compara caracter a caracter.

use o método “banana”.toCharArray();

não se exqueça você começando da esquerda para a direita e não da direita para a esquerda como diz o enunciado

Seu FOR deveria ser ao contrário, ao invés de ser ++ deveria ser –

garotinhodejesus

ok, não quero pronto quero dicas assim como vc me passou. Preciso aprender.
Bom eu alterei segundo as dicas do Bruno. mas esta dando erro de compilação na ora de receber o caracter pra converter para double. como posso resolver esse erro?

brunobuild

Da uma pesquisada no google como converter para double.

tabocu

Nao faça desse jeito

use substring

String a;
a.substring(x,x+1)

Voce obtem um string da posição que voce quizer

Fica mais facil pra converter tendo o valor em string do que em char

Dependendo pode ser util o uso de Tokens

brunobuild

tabocu,

Não sei, você deve manjar mais que eu mas, aproveitando a deixa.

Você usar substring é um pouco mais custoso para o java.
Imagina se você tem uma String com por exemplo 500 caracteres. você vai ter que fazer um for de 500 iterações para pegar caracter por caracter e armezenar na string, tirando que tipo primitivos deveriam ser mais ageis do que atributo do tipo String por exemplo.

garotinhodejesus

Para converter um char em double, você pode usar a biblioteca beanutils da apache, nela existe uma classe de conversao, muito interessante podendo ser usada na maioria dos tipos, para utilizar você pode usar da seguinte maneira.

char c = '0';
		
System.out.println(ConvertUtils.convert(c, Double.class));

Abraços,

garotinhodejesus

valeu pelas respostas, assim que eu chegar em casa vou ver se consigo acertar o código. é o último exercicio de um curso que estou fazendo online e amanha é o ultimo dia para entrega-lo. mais uma vez obrigado a todos.

Mephy

usa o método charAt() da classe String e aplica no loop for .-.

int contChar = 1;
for (int i = numero.length() - 1; i >= 0; i--, contChar++){
   resultado += contChar * Integer.parseInt(numero.charAt(i));
}

não tenho certeza se Java lê eses código como C++, se não der certo, é só tirar o contChar++ da declaração do for e colocar ele dentro do bloco, logo abaixo da soma-atribuição da variável resultado
lembrando que é sempre bom usar o try-catch, o método parseInt arremessa a exception NumberFormatException se não vier um valor numérico pra ela

isso aí n.n

garotinhodejesus

Mais uma vez obrigado a todos!!!

brunobuild

Qual foi a solução?

garotinhodejesus
public class TesteFinal {

    public static void main(String[] args) {
        String entrada = JOptionPane.showInputDialog("Entre com uma String");
        int resultado=0;
        int contador = 0;
        int multi = 0;


        for (int i = entrada.length()-1; i >=0; i--) {
          if(entrada.charAt(i)=='0' || entrada.charAt(i)=='1'){
             if (entrada.charAt(i) == '1') {
                contador++;
                multi = 1;
            }
            if(entrada.charAt(i) == '0'){
                contador++;
                multi = 0;
            }
          }
        }
        System.out.println("Resultado: " + resultado);
    }
}

Qualquer vacilo vai dizendo que tentarei corrigir e aprender a me movimentar corretamente no Guj

Mephy

garotinhodejesus:
for (int i = entrada.length()-1; i >=0; i--) { if(entrada.charAt(i)=='0' || entrada.charAt(i)=='1'){ if (entrada.charAt(i) == '1') { contador++; multi = 1; } if(entrada.charAt(i) == '0'){ contador++; multi = 0; } } }

o teste lógico ai tá “errado” (testando coisas à toa)
você fez que: se o caractere for 0 ou 1, se o caractere é igual a 1, se o caractere é igual a 0

seria muito melhor: se o caractere for 1, senão se o caractere for igual a 0
algo como:

for(){ if(==1){ } else if (==0){ } }

assim temos só dois testes invés de três, e pode se tornar um só caso for 1 (se entra no if, pula o respectivo else)

Criado 6 de abril de 2011
Ultima resposta 9 de abr. de 2011
Respostas 11
Participantes 4