Jump to content
TP

programa não esta a dar erros, mas também não corre plz help

Recommended Posts

TP

Boas, eu tenho que entregar um projecto, que é programar um jogo, o MineSweeper, já programei não esta a dar erros mas mesmo assim quando carrego no run aparece-me um erro, e não estou mesmo a ver o que é, pff quem souber que diga algo, obrigado

public class Minesweeper { 
   public static void main(String[] args) { 
      int M = Integer.parseInt(args[0]);
      int N = Integer.parseInt(args[1]);
      double p = Double.parseDouble(args[2]);
      
      
      boolean[][] bombs = new boolean[M+2][N+2];
      for (int i = 1; i <= M; i++)
         for (int j = 1; j <= N; j++)
            bombs[i][j] = (Math.random() < p);

      
      for (int i = 1; i <= M; i++) {
         for (int j = 1; j <= N; j++)
            if (bombs[i][j]) System.out.print("* ");
            else             System.out.print(". ");
         System.out.println();
      }

      
      int[][] sol = new int[M+2][N+2];
      for (int i = 1; i <= M; i++)
         for (int j = 1; j <= N; j++)
            for (int ii = i - 1; ii <= i + 1; ii++)
               for (int jj = j - 1; jj <= j + 1; jj++)
                  if (bombs[ii][jj]) sol[i][j]++;

      
      System.out.println();
      for (int i = 1; i <= M; i++) {
         for (int j = 1; j <= N; j++)
            if (bombs[i][j]) System.out.print("* ");
            else             System.out.print(sol[i][j] + " ");
         System.out.println();
      }

   }
}

e o erro que aparece é o seguinte:

> run Minesweeper

java.lang.ArrayIndexOutOfBoundsException: 0

at Minesweeper.main(Minesweeper.java:3)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271) :thumbsup:

Share this post


Link to post
Share on other sites
mjamado

Isso quer dizer que estás a ultrapassar os limites de um array que declaraste.

Quase - o array "ofendido" é implicitamente declarado: é o args...

TP, não deves confiar cegamente que existem parâmetros de entrada no programa. Coloca algumas condições e valores por defeito. Ao clicares no Run do IDE, estás a iniciar o programa sem parâmetros, o que dá asneira quando tentas ler esses parâmetros.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
TP

obgd aos dois pela ajuda, mas estou um pouco a toa ainda, nao estou a ver aonde posso colocar as condiçoes e de que tipo, se me podessem ajudar eu agradecia imenso

Share this post


Link to post
Share on other sites
brunoais

Uma coisa deste tipo:

public class Minesweeper { 
   public static void main(String[] args) { 
      System.out.print("São "+args.length+" args");
      if(args.length > 2){
      int M = Integer.parseInt(args[0]);
      int N = Integer.parseInt(args[1]);
      double p = Double.parseDouble(args[2]);
     
...} else {
      System.out.print("no de argumentos insuficiente");
}} //o main acaba aqui


"[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%.

Share this post


Link to post
Share on other sites
brunoais

Então começa por enviar o nº de argumentos suficiente ao correr o programa!


"[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%.

Share this post


Link to post
Share on other sites
TP

Ja experimentei com varios numeros de argumentos ate meti um numero grande mas mesmo assim esta a dar numero de argumentos insuficiente esta sempre a ler aquele else e nao le o resto do programa

Share this post


Link to post
Share on other sites
brunoais

Tenta agora com o novo código (em cima)


"[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%.

Share this post


Link to post
Share on other sites
brunoais

Isso quer dizer que estás a tentar sempre com 0 argumentos. Tens que usar mais!

Aonde pensas que estás a alterar o nº de argumentos n é o sítio correcto. Que programa estás a usar para fazer este programa?


"[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%.

Share this post


Link to post
Share on other sites
TP

  if(args.length > 3){ // aqui tambem mudei mas nao da na mesma

      int M = Integer.parseInt(args[1]);

      int N = Integer.parseInt(args[2]);

      double p = Double.parseDouble(args[3]);

mudei aqui

estou a usar o dr. java

Share this post


Link to post
Share on other sites
brunoais

Infelizmente n o conheço. N me parece que esse código tenha erro, por isso vais ter que esperar q alguém mais consiga saber cmo resolver o problema.


"[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%.

Share this post


Link to post
Share on other sites
mjamado

TP, ainda não percebeste o que é que nós estamos a dizer: tens que executar a aplicação com argumentos.

Isto é, e se fosse um executável normal, na consola:

c:\> meuexecutavel
São 0 argumentos numero de argumentos insuficiente

c:\> meuexecutavel 1
São 1 argumentos numero de argumentos insuficiente

c:\> meuexecutavel 1 2
São 2 argumentos numero de argumentos insuficiente

c:\> meuexecutavel 1 2 3
Estou a fazer coisas, porque os argumentos já estão correctos

Agora... Eu não conheço o DrJava, mas na maioria dos IDE existe uma zona para definir parâmetros quando se manda executar - tens que procurar essa zona, e acrescentar lá os parâmetros necessários.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
TP

TP, ainda não percebeste o que é que nós estamos a dizer: tens que executar a aplicação com argumentos.

Isto é, e se fosse um executável normal, na consola:

c:\> meuexecutavel
São 0 argumentos numero de argumentos insuficiente

c:\> meuexecutavel 1
São 1 argumentos numero de argumentos insuficiente

c:\> meuexecutavel 1 2
São 2 argumentos numero de argumentos insuficiente

c:\> meuexecutavel 1 2 3
Estou a fazer coisas, porque os argumentos já estão correctos

Agora... Eu não conheço o DrJava, mas na maioria dos IDE existe uma zona para definir parâmetros quando se manda executar - tens que procurar essa zona, e acrescentar lá os parâmetros necessários.

diga-me só uma coisa, no seu programa o jogo MineSweeper aparece e esta a funcionar?

eu tentei meter diferentes valores na consola mas não esta a dar na mesma

Share this post


Link to post
Share on other sites
brunoais

E q tal: diferentes numeros de valores?


"[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%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.