Olá pessoal, sou novo no grupo e preciso de uma ajuda, preciso fazer um simulador de um Rover, para isso preciso usar um plano cartesiano (x,y) para identificar a posição inicial do mesmo e controlar seu movimento a partir de direções “S”, “N”, “L”, “O” sendo que cada posição dessa incrementa e decrementa x e y. Já consegui fazer as entradas das coordenadas x, y e as entradas das direções, usei o switch para os casos das direções, mas o usuário pode entrar com quantas direções ele quiser, como faço no switch para ele ler caracter por caracter? No caso se entrasse com: SSSONLL?
Você pode manter a string completa com a entrada do usuário e fazer um loop usando o método charAt da classe string:
String s = "SSSONLL"; // string recebida do usuário
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
// aqui vem seu switch, usando c como identificador
}
Ou transformar a string em um array com e fazer um loop no array:
String s = "SSSONLL"; // string recebida do usuário
char ch[] = s.toCharArray(); // ch é um array de char
for(int i=0; i<ch.length; i++){
char c = ch[i];
// aqui vem seu switch, usando c como identificador
}
Abraço.
Olá mas essa string não é fixa a pessoa pode entrar com qualquer comando de direções usei como exemplo aquela mas pode ser NNLOSSOOON. E no final ele tem que somar ou diminuir a posição inicial a partir dos comandos de posições.
Texto pré-formatado
import java.util.Scanner;
public class rover {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
int x = 0;
System.out.println(“Digite um valor para coordenada x”);
x = in.nextInt();
int y = 0;
System.out.println(“Digite um valor para coordenada y”);
y = in.nextInt();
System.out.println(“Digite as coordenadas do rover utilixando S, N, L e O”);
String direcoes = in.next();
for(int i = 0; i < direcoes.length(); i++){
switch(i){
case "S":
x++;
System.out.println("Você movimentou o rover para S");
break;
case "N":
x--;
System.out.println("Você movimentou o rover para N");
break;
case "L":
y--;
System.out.println("Você movimentou o rover para L");
break;
case "O":
y++;
System.out.println("Você movimentou o rover para O");
break;
default:
System.out.println("Você digitou uma coordenada invalida");
break;
}
}
}
}
A string fixa foi só um exemplo, você obviamente vai substituir pelo que o usuário vai informar.
Pegando o seu código como base, você teria algo assim, a partir da entra das coordenadas:
// ...
String direcoes = in.nextLine();
for(int i = 0; i < direcoes.length(); i++){
switch(direcoes.charAt(i)){
case 'S':
// codigo para o S, igual ao que você já fez
case 'N':
// codigo para o N, igual ao que você já fez
// acho que dá pra entender a ideia
}
}
Note que charAt retorna um char, não uma string, então a comparação no case é com apóstrofo/aspas simples.
Abraço.
Obrigado, resolveu o problema de da leitura, agradeço mesmo, agora só computar e printar o resultado de (x, y). Novamente obrigado.
O meu erro que estava tentando por o charAt fora do switch, as aspas já havia arrumado, mas por meu charAt estar fora, ele só dava erro que não conseguia converter char para int.