Preciso de ajuda em um simulador de Rover

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é-formatadoimport 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.

1 curtida

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.