Preciso de ajuda em um simulador de Rover

5 respostas
java
BrunoMielczarski

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?

5 Respostas

TerraSkilll

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.

BrunoMielczarski

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;

}
}
}
}
TerraSkilll

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.

BrunoMielczarski

Obrigado, resolveu o problema de da leitura, agradeço mesmo, agora só computar e printar o resultado de (x, y). Novamente obrigado.

BrunoMielczarski

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.

Criado 25 de abril de 2020
Ultima resposta 25 de abr. de 2020
Respostas 5
Participantes 2