S/N? em Java....

[BoB]Marley

To fold or to FOLD?
já tenho o meu programa (em java) para o projecto de IP acabado, mas ha um promenor que gostava de adicionar mas n sei como pô-lo a funcionar... basicamente é um ciclo que há-de perguntar se tem a certeza ou não para sair, mas aki tá mais simplificado.

e é o seguinte:

import java.util.Scanner;
public class caracter {

public static void main(String[] args) {

Scanner sc= new Scanner (System.in);

String opcao;
do{
System.out.println ("(S)im ou (N)ao?");
opcao=sc.next();
if (opcao=="S" || opcao=="s"){
System.out.println ("Sim");
break;
}
if (opcao=="N" || opcao=="n"){
System.out.println ("Nao");
break;
}

}
while (opcao!="s" || opcao!="S" || opcao!="N" || opcao!="n") ;
}


}


o que estará mal aki? é ke ao executar, depois de digitar o "s" ou o "n", o ciclo continua >(

depois de passado o ke passei a fazer o programa, parece estupido n conseguir fazer isto, mas pronto....
 
Já fizeste debug para ver o que está na variavel "opção"? Define opção como char, ou usa no if
opcao.equals("N").

Se tiver a dizer bacorada não se admirem que eu só mexo em .Net e ABAP. Mas como o java é parecido com C#...
 
hmmmm.. epa... sinceramente, nem me ocorreu fazer isso... 8o

e tanta vez que fiz isso durante o programa :X

vou ver e mais daki pouco digo qq coisa ;)

thx anyway :)
 
a variavel está a receber o valor... mas o "if" n parece estar a fazer nada... :(

o ide (Gel) ke tou a usar tb n ajuda mto, mas agora n posso dar-me ao luxo de mudar :\
 
Em java não podes comparar strings desse modo.

esses if's terão de ser algo do género :

if (opcao.equals("S")||opcao.equals("s"))

ou melhor ainda

if (opcao.equalsIgnoreCase("s"))

outra opção é usares o:

if (opcao.compareTo("S")<0 || opcao.compareTo("s")<0)
 
Java!!!! Help Nothing

NOTHING TOU A VER KE DOMINAS O JAVA NÃO ME QUERES DAR UMAS DICAS,eu quero iniciar-me em Java, se puderes-me mandar sites que falem de java, tutoriais e programas para trabalhar agradecia.

obrigado.
 
nothing disse:
Em java não podes comparar strings desse modo.

esses if's terão de ser algo do género :

if (opcao.equals("S")||opcao.equals("s"))

ou melhor ainda

if (opcao.equalsIgnoreCase("s"))

outra opção é usares o:

if (opcao.compareTo("S")<0 || opcao.compareTo("s")<0)

thx nothing! you're da man!

já tá a bulir. :D o meu problema é ke em todo o programa n precisei de comparar strings, daí o meu desconhecimento... o meu primeiro contacto com a programação java, foi na primeira aula de IP ;)

já agora o programa corrigido ficou assim:

import java.util.Scanner;
public class caracter {

public static void main(String[] args) {

Scanner sc= new Scanner (System.in);

String opcao;
do{
System.out.println ("(S)im ou (N)ao?");
opcao=sc.next();
System.out.println(opcao);
if (opcao.equals("S") || opcao.equals("s")){
System.out.println ("Sim");
break;
}
if (opcao.equals("N") || opcao.equals("n")){
System.out.println ("Nao");
break;
}

}
while (opcao!="s" || opcao!="S" || opcao!="N" || opcao!="n") ;

}


}
 
Ou o switch-case, é aí que uso os breaks, senão ele vai estar sempre a perguntar.
Em que o default é tudo sem ser o N, n, S, s.
Se precisares da sintaxe diz.
 
quando chegar a casa, é que vou testar junto ao programa, para ver o comportamento....

depois digo qq coisa ;)

obrigado a todos pela ajuda... já vi ke há aki grandes "cromos" em java ;)
eu ainda tenho mto para aprender.... e mta ferrugem para tirar
 
Sim, o switch/case também é eficaz para isso, mas primeiro a var opcao terá de ser passada para primitiva (char, int, etc) porque o switch não funciona com Strings.

De qualquer modo os breaks que tens dentro dos if's estão a mais, porque se o user carregar em "S","s","N" ou "n" ele sai do do{..}while();

Santosnm,
O melhor site que anda por aí de Java é mesmo o da Sun, em especial os forums que são excelentes.
 
Última edição:
nothing disse:
Sim, o switch/case também é eficaz para isso, mas primeiro a var opcao terá de ser passada para primitiva (char, int, etc) porque o switch não funciona com Strings.

De qualquer modo os breaks que tens dentro dos if's estão a mais, porque se o user carregar em "S","s","N" ou "n" ele sai do do{..}while();

Santosnm,
O melhor site que anda por aí de Java é mesmo o da Sun, em especial os forums que são excelentes.

saía, por causa do break :P mas tb n era o caso.... o importante neste caso era "imprimir" o sim ou o nao

mas de qq maneira, ja integrei no programa do projecto e já tá a bulir 110%... fica um excerto ;)
if(menu==0){ // opção para sair
String opcao;
boolean sair=false;
do{
System.out.println();
System.out.println(" ---------------------------");
System.out.println(" | Sair |");
System.out.println(" | Tem a certeza? |");
System.out.println(" | (S)im / (N)ão |");
System.out.println(" ---------------------------");
opcao=sc.next();
if (opcao.equals("S") || opcao.equals("s")){
sair=true;
break;
}

if (opcao.equals("N") || opcao.equals("n"))
break;

}
while (opcao!="s" || opcao!="S" || opcao!="N" || opcao!="n") ;
if (sair==true)
break;
else
menu=1;

}
 
tb tens o equaslIgnoreCase acho eu, para comparar independentemente de ser maiuscula ou minuscula.
Ao comparares da forma que estavas a fazer inicialmente estás a comparar os endereços de memoria em vez da string em si.
 
kronos disse:
Ao comparares da forma que estavas a fazer inicialmente estás a comparar os endereços de memoria em vez da string em si.

Tem a ver com o facto do tipo String não ser um tipo primitivo de vars em Java. Por isso é que não dá para comparar directamente.
 
ZyPhAX disse:
Né por nada mas se tivesses lido o que eu escrevi, tava la essa recomendação :P

tens razao.... mas passou-me despercebido essa parte.. soryy :X
thx anyway, you're da man too! ;)


p.s.: e vê lá se escreves com nick igual, é ke ainda estive uns 5min a tentar perceber o ke kerias dizer :007:
 
[BoB]Marley disse:
tens razao.... mas passou-me despercebido essa parte.. soryy :X
thx anyway, you're da man too! ;)


p.s.: e vê lá se escreves com nick igual, é ke ainda estive uns 5min a tentar perceber o ke kerias dizer :007:
Ehehe, um o é o meu, o outro é do meu irmao. Só depois de postar é que reparo que tou com o login errado.
 
Back
Topo