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.
Não entendi qual é sua dúvida ou dificuldade.
É 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, aí 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.
https://respostas.guj.com.br/14621-validar-a-resposta-do-usuario-somente-com-s-ou-n-em-java
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.
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.
Agora entendi melhor, devo ter esquecido a palavra imutável. Assim vou poder melhor usar cada um no momento adequado.