Ir para o conteúdo
Edgar_C

Erro em java - ArrayIndexOutOfBoundsException

Mensagens Recomendadas

Edgar_C

Tenho este código

package pt.ulht.fp.curiosity.core;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

import pt.ulht.fp.curiosity.RobotController;
import pt.ulht.fp.curiosity.Simulator;
import pt.ulht.fp.curiosity.Simulator.Map;
import pt.ulht.fp.curiosity.Simulator.Speed;

public class Curiosity {

   static int linhaactual, colunaactual, totallinhas, totalcolunas, orientacaoActual;

   public enum Objectos {

Espaço, desconhecido, parede, estacaoenergia
   }
   static Objectos[][] mapa;

   public enum direccao {

NORTE, SUL, ESTE, OESTE
   }
   static direccao direccaodorobot;

   public static String EnumemString(Object mapa) {

if (mapa == Objectos.estacaoenergia) {
    return "!";
} else if (mapa == Objectos.Espaço) {
    return " ";
} else if (mapa == Objectos.parede) {
    return "X";
} else {
    return "?";
}
   }

   public static void ESTADO() throws IOException {

transmitState("teste.txt");

   }

   private static int Saberlinhafrente() {
if (direccaodorobot == direccao.NORTE) {
    return (linhaactual - 1);
} else if (direccaodorobot == direccao.SUL) {
    return (linhaactual + 1);
}
return linhaactual;
   }

   private static int Sabercolunafrente() {
if (direccaodorobot == direccao.OESTE) {
    return (colunaactual - 1);
} else if (direccaodorobot == direccao.ESTE) {
    return (colunaactual + 1);
}
return colunaactual;
   }

   public static void escolherdireccao(boolean lado) {
if (direccaodorobot == direccao.NORTE) {
    direccaodorobot = direccao.ESTE;
} else {
    direccaodorobot = direccao.OESTE;
}
if (direccaodorobot == direccao.SUL) {
    direccaodorobot = direccao.OESTE;
} else {
    direccaodorobot = direccao.ESTE;
}
if (direccaodorobot == direccao.ESTE) {
    direccaodorobot = direccao.SUL;
} else {
    direccaodorobot = direccao.NORTE;

}
if (direccaodorobot == direccao.OESTE) {
    direccaodorobot = direccao.SUL;
} else {
    direccaodorobot = direccao.NORTE;
}

   }

   public static void viraesquerda() {
RobotController.turnLeft();
escolherdireccao(false);
   }

   public static void viradireita() {
RobotController.turnRight();
escolherdireccao(true);
   }

   public static void actualizacaoposicao() {
switch (direccaodorobot) {
    case OESTE:
	colunaactual = colunaactual - 1;
	break;

    case ESTE:
	colunaactual = colunaactual + 1;
	break;
    case NORTE:
	linhaactual = linhaactual - 1;
	break;
    case SUL:
	linhaactual = linhaactual + 1;
	break;

}

   }

   public static Objectos[][] mapas(int line, int column, int numLines, int numColumns) {
Objectos[][] mapaInicial = new Objectos[numLines][numColumns];
int i, y;
for (i = 0; i < mapaInicial.length; i++) {
    for (y = 0; y < mapaInicial[i].length; y++) {
	mapaInicial[i][y] = Objectos.desconhecido;
    }
}
line = linhaactual;
column = colunaactual;
mapaInicial[line][column] = Objectos.Espaço;
return mapaInicial;

   }

   public static boolean sentirparede(int linhadafrente, int colunadafrente) {
if (RobotController.senseSpace()) {
    mapa[linhaactual][colunaactual] = Objectos.Espaço;
    return true;
} else if (RobotController.senseWall()) {
    mapa[linhadafrente][colunadafrente] = Objectos.parede;
    mapa[linhaactual][colunaactual] = Objectos.Espaço;
    return false;
} else {
    mapa[linhadafrente][colunadafrente] = Objectos.estacaoenergia;
    mapa[linhaactual][colunaactual] = Objectos.Espaço;
    return false;
}

   }

   public static boolean sentirespaco() {
int linhadafrente = Saberlinhafrente();
int colunadafrente = Sabercolunafrente();
switch (mapa[linhadafrente][colunadafrente]) {
    case desconhecido:
	return sentirparede(linhadafrente, colunadafrente);
    case Espaço:
	return true;
    case parede:
	return false;
    case estacaoenergia:
	return false;
    default:
	return false;
}


   }

   public static void configLandingSite(int line, int column, int numLines,
    int numColumns) {
//Inicializa estado do robot
direccaodorobot = direccao.NORTE;
mapa = mapas(line, column, numLines, numColumns);






   }

   public static void controlRobot() throws IOException {
int energia = RobotController.getEnergy();
System.out.println("energia");
if (RobotController.senseEnergy() == true) {
    RobotController.recharge();

} else if (RobotController.senseEnergy() == false) {
    actualizacaoposicao();
    viraesquerda();
}

if (sentirespaco()) {
    if (RobotController.getEnergy() < 3) {
	ESTADO();
    } else {

	RobotController.move();
	actualizacaoposicao();
    }
} else {
    Random rnd = new Random();
    int n = rnd.nextInt(3);
    if (n == 0) {
	viraesquerda();
//estadoRobot();

    } else if (n == 1) {
	viradireita();
//estadoRobot();
    }

}
   }

   public static void transmitState(String filename) throws IOException {
//Escrever estado para ficheiro filename passado como argumento
BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
for (int x = 0; x < mapa.length; x++) {
    for (int y = 0; y < mapa[x].length; y++) {
	bw.write(EnumemString(mapa[x][y]));
    }
    bw.write(System.getProperty("line.separator"));
}

System.out.println("Imprimiu");
bw.flush();
bw.close();
   }

   public static void main(String[] args) {
//Experimentar Map.WORLD01 Map.WORLD02 Map.WORLD03 Map.WORLD04 Map.WORLD05
//e as velocidades Speed.SLOW Speed.NORMAL Speed.FAST
Simulator.run(Map.WORLD05, Speed.FAST);
   }
}

E está-me a dar o seguinte erro:

java.lang.ArrayIndexOutOfBoundsException: -2
ERROR: Could not initiate simulator
at pt.ulht.fp.curiosity.core.Curiosity.sentirespaco(Curiosity.java:129)
at pt.ulht.fp.curiosity.core.Curiosity.controlRobot(Curiosity.java:160)
at pt.ulht.fp.curiosity.Simulator.run(Simulator.java:55)
at pt.ulht.fp.curiosity.core.Curiosity.main(Curiosity.java:201)

E não consigo resolve-lo, alguém me ajuda?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

  1. Corrige a indentação
  2. Corrige o título. Sê mais específico em relação ao problema que tens. Neste caso é um ArrayIndexOutOfBoundsException, ter isso em conta é um bom sítio para onde começar.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.