Livro Cap3.1.1
Livro Cap3.1.1
0
Jesimar da Silva Arantes
seõçatona reV
MAIOR SOFISTICAÇÃO NA CONSTRUÇÃO DO SIMULADOR DE ROBÔ
Leitura de dados do teclado para movimentação do robô, tratamento de exceção para deixar a
aplicação mais tolerante a falhas e criação de uma classe robô abstrata para modelar a ideia da
entidade robô.
Fonte: Shutterstock.
0
Fazer a leitura das posições que o robô irá deslocar por meio do teclado.
seõçatona reV
Criar um tratamento de exceção em pontos possivelmente críticos.
Criar uma classe robô abstrata que irá modelar a ideia da entidade robô.
0
pressionadas: 'w', ‘a', ‘s’ e ‘d’. (Caso a tecla zero (0) seja pressionada, então, será
seõçatona reV
encerrada a aplicação, mas caso alguma outra tecla seja pressionada, uma exceção
será lançada e uma nova tecla será requisitada.) Em seguida, você criou a classe
RoboIdeia, na qual constam os seguintes atributos: posicaoX, posicaoY, orientacao,
nome e peso, bem como a definição de que todo robô deve sobrescrever os
métodos move, moveX e moveY. Após isso, a classe Robo foi criada como uma
subclasse de RoboIdeia. Entre as linhas 35 e 80, foram destacados alguns aspectos
modificados do código anterior. Nessa versão do código, você colocou os métodos
move, moveX e moveY para lançarem exceções do tipo IllegalArgumentException
caso o argumento seja NaN (Not a Number) ou infinito. O método setOrientacao,
por sua vez, também lança uma exceção caso não seja pressionada nenhuma das
teclas 'w', ‘a', ‘s’ e ‘d’.
Código 3.11 | Nova modelagem das classes App, RoboIdeia, Robo e CaixaIdeia
1 public class App {
2 public static void main(String[] args) {
0
5 Scanner scan = new Scanner(System.in);
seõçatona reV
6 boolean ok = false;
7 do {
8 try {
9 tecla = scan.next();
10 robo.setOrientacao(tecla.charAt(0));
11 robo.printPos();
12 } catch (IllegalArgumentException ex){
13 if (tecla.charAt(0) == '0') {
14 ok = true;
15 } else {
16 System.out.println("Valor errado");
17 scan.nextLine();
18 ok = false;
19 }
20 }
21 } while(!ok);
22 robo.printPos();
23 }
24 }
25 public abstract class RoboIdeia {
34 }
35 public class Robo extends RoboIdeia {
36 ...
37 @Override
0
39 if (Float.isNaN(posX) || Float.isNaN(posY) ||
40 Float.isInfinite(posX) || Float.isInfinite(posY)) {
seõçatona reV
41 throw new IllegalArgumentException("Args não válidos");
42 }
43 super.posicaoX = posX;
44 super.posicaoY = posY;
45 }
46
47 @Override
49 if (Float.isNaN(dist) || Float.isInfinite(dist)) {
50 throw new IllegalArgumentException("Arg não válido");
51 }
52 super.posicaoX += dist;
53 }
54
55 @Override
57 if (Float.isNaN(dist) || Float.isInfinite(dist)) {
58 throw new IllegalArgumentException("Arg não válido");
59 }
60 super.posicaoY += dist;
61 }
62
64 if (tecla == 'w') {
65 super.orientacao = FRENTE;
66 moveY(5);
68 super.orientacao = ATRAS;
69 moveY(-5);
70 } else if (tecla == 'a') {
71 super.orientacao = ESQUERDA;
72 moveX(-5);
0
74 super.orientacao = DIREITA;
75 moveX(5);
seõçatona reV
76 } else {
79 }
80 }
83 }