Strings e chars em java

5 respostas
java
D

Prazer para todos.
Bem, estive pesquisando com mais profundidade a classe String e o tipo char. Eu ainda tenho um pouco de dificuldades em trabalhar com Strings e char. Strings é uma classe e que é um vetor de caracteres e termina com \0 no final para indicar a última posição do vetor. Char é um tipo primitivo. Para isso é preciso pesquisar o vetor para encontrar uma letra em determinada posição, creio melhor atribuir uma variável string e também criar um objeto da classe String e depois extrair ela com o método equals ou outros métodos. Com char não é possível. A classe string tem vários construtores e métodos que facilitam. Isso tudo para não misturar com números. Assim converto em bytes, mas tenho dúvida se é convertido em um vetor de bytes ou não. Mesmo que ocupe mais espaço etc. Porque podemos ter que ler as vezes um só caractere e ter de usar a classe em vez do tipo. A mesma coisa quando usamos float ou double no java, pois sempre indicam para usar double para evitar problemas com o tipo float.

5 Respostas

S

Não entendi qual é sua dúvida ou dificuldade.

D
É que sinto sempre dificuldades entre char e strings. Tem de ficar convertendo. Eu entendi o funcionamento, mas sempre quando tem um while que utiliza um boolean por exemplo, como s ou n para responder, nunca funciona, sempre sou forçado a usar string com equalsIgnoreCase ou equals,  descobri em uma mensagem para criar uma nova entrada com scanner para usar somente a string. Não achei conveniente. Parece que o java não trata muito bem os chars. Ocupa menos memória e processamento que strings. Char é um tipo e string um objeto, que é tratado como um vetor.

Sanner entrada = new Scanner(System.in);

char c;

c = entrada.next().charAt(0); para eu poder ler o char.

char resp;

Ou usar um flag.

while(resposta==s) || (resposta==S). Desse modo o código não funciona.

Veja este post abaixo.O java trata muito mal os chars. Não é como no C++ ou pascal.

<a href="https://respostas.guj.com.br/14621-validar-a-resposta-do-usuario-somente-com-s-ou-n-em-java" class="onebox" target="_blank">https://respostas.guj.com.br/14621-validar-a-resposta-do-usuario-somente-com-s-ou-n-em-java</a>
I

Claro que funciona, só que no exemplo, o caractere digitado é armazenado na variável c

, mas vocês usa a variável resposta na comparação e não a variável c.

Além disso, tem um problema com o parênteses no while. O certo seria:

while((c == 's') || (c == 'S')){

}

Lembrando que:

1 - Estrutura de Repetição Determinada (ERD): o algoritmo apresenta previamente a quantidade de repetições.

-> for(inicalização; condição; incremento/decremento);

2 - Estruturas de Repetição Indeterminada (ERI): o algoritmo não apresenta previamente a quantidade de repetições, ou seja, não se conhece quantas iterações serão executadas.

2.1 - ERI com Validação Inicial: a verificação da condição que valida a repetição é testada no início do algoritmo. Logo, o teste resultar em falso (false), nenhuma repetição será realizada.

-> while(condição);

2.2 - ERI com Validação Final: a verificação da condição é realizada no final, depois de pelo menos uma repetição. Logo, ao menos uma repetição será executada.

-> do...while(condição);

Observação: eu sempre uso char para esse tipo de menu.

S

char (em minúsculo) é um tipo primitivo com magnitude de 2 bytes.
String é uma classe que encapsula um vetor de char.

String possui suas peculiaridades mas não é tratada como um vetor não.

Objetos do tipo String são imutáveis, uma vez instanciado, você não consegue alterar o conteúdo da cadeia de caracteres, se fosse puramente um vetor, você poderia alterar o conteúdo dele.

D

Agora entendi melhor, devo ter esquecido a palavra imutável. Assim vou poder melhor usar cada um no momento adequado.

Criado 8 de dezembro de 2019
Ultima resposta 10 de dez. de 2019
Respostas 5
Participantes 3