Dúvida com Arrays. [Resolvido]

17 respostas
Rafael_Guerreiro

Olá galera, tudo bem?

Eu venho acompanhando o fórum já tem bastante tempo… Faço faculdade de Sistemas à noite, mas não quero esperar o professor para eu aprender Java… Comecei em agosto e ele nem ensinou vetores ainda… Por isso o conceito de classes e métodos estão um pouco confusos na minha cabeça… Inclusive como utilizá-los…

Mas enfim, minha dúvida agora é outra…

Preciso criar um Array bidimensional público, mas eu só vou saber exatamente quantas linhas e colunas ele terá quando eu conseguir algumas informações do usuário… A ideia é que eu possa modificar esse Array em todos os métodos da minha única classe…

Eu estou usando o prompt de comandos para compilar e executar meus códigos…

Muito obrigado a todos…

Aliás, esse fórum tem me ajudado muito!

P.S.: Assim eu consigo entender melhor como que funcionam os métodos, os meus códigos ficam todos dentro do método main, feio isso né?

17 Respostas

O
Voce não consegue fazer algo do tipo:

Integer[][] teste = new Integer[x][y];

Para pegar esse números você pode passar como argumento na chamada do método main. Seriam números do args

 precisaria fazer algo do tipo

Integer.parseInt(args[1])

para transformar para Integer
Rafael_Guerreiro

otaviosantana:
Bom, não sei exatamente quais são os erros que está encontrando, mas você está com algumas falhas no seu algoritmo. No calculaMedia você está desprezando sempre o último elemento dos seu vetor!! No calculaMaior e calculaMenor você ignora o numero que você colocou na variável maior e menor, respectivamente. Você está comparando apenas os elementos adjacentes do vetor sem se preocupar com o número que está em maior( ou menor).
Se não for isso diga quais são os erros!

Han?? Na verdade eu não postei nenhum código e nem qual é o erro… Eu só preciso saber como fazer isso, visto que não encontro em lugar algum…

O

Foi mal, postei errado… Mas acho que já arrumei…

Rafael_Guerreiro

Então, deste jeito eu consigo, o problema é que eu faço isso dentro do Main para poder decidir, conforme o usuário, a quantidade de linhas e colunas…
Se eu fizer assim, o meu array não é reconhecido pelos outros métodos, senão o Main…

Eu preciso de um jeito de deixá-lo publico e instanciá-lo dentro do Main…

Também tem outro problema… Eu não sei direito como que funciona essa passagem de parametros no Java… É muito confuso…

F

// Criando o vetor bidimensional(Array), nesse caso, seu tipo é de inteiro, porém pode ser de qualquer tipo que desejar. Exemplo:
public int[][] meuArray;

//Quando for o usuario digitar a quantidade de linhas e colunas, você o instancia, Exemplo:

Scanner s = new Scanner(System.in);

// Lendo do teclado a quantidade de linhas que o array vai possuir

int linhas = s.nextInt();

// Lendo do teclado a quantidade de colunas que o array vai possuir

int colunas = s.nextInt();

meuArray = new int[linhas][colunas];

Acho que é isso que você está querendo saber, qualquer dúvida só postar que posso lhe ajudar.

F

Rafael Guerreiro:
Então, deste jeito eu consigo, o problema é que eu faço isso dentro do Main para poder decidir, conforme o usuário, a quantidade de linhas e colunas…
Se eu fizer assim, o meu array não é reconhecido pelos outros métodos, senão o Main…

Eu preciso de um jeito de deixá-lo publico e instanciá-lo dentro do Main…

Também tem outro problema… Eu não sei direito como que funciona essa passagem de parametros no Java… É muito confuso…

Isso acontece pq o método Main é um método estático(static), então para você trabalhar seu vetor no método main você teria que criar esse vetor ou array estático, assim oh:

public static int[][] meuArray;

Rafael_Guerreiro

faelz1n:
// Criando o vetor bidimensional(Array), nesse caso, seu tipo é de inteiro, porém pode ser de qualquer tipo que desejar. Exemplo:
public int[][] meuArray;

//Quando for o usuario digitar a quantidade de linhas e colunas, você o instancia, Exemplo:

Scanner s = new Scanner(System.in);

// Lendo do teclado a quantidade de linhas que o array vai possuir

int linhas = s.nextInt();

// Lendo do teclado a quantidade de colunas que o array vai possuir

int colunas = s.nextInt();

meuArray = new int[linhas][colunas];

Acho que é isso que você está querendo saber, qualquer dúvida só postar que posso lhe ajudar.

Então, eu tentei algo parecido com isso e deu erro…

Eu coloquei o “int [][] meuArray;” na parte de fora do método main e o “meuArray = new int[linhas][colunas];” na parte de dentro, logo depois de descobrir os valores… Eu vou tentar desse jeito, o problema é que estou no trabalho e só poderei testar de noite :frowning:

Mas muito obrigado…

P.S.: se der certo eu mudo o título para Resolvido…

F

tem que colocar static int[][] meuArray

Rafael_Guerreiro

faelz1n:

Isso acontece pq o método Main é um método estático(static), então para você trabalhar seu vetor no método main você teria que criar esse vetor ou array estático, assim oh:

public static int[][] meuArray;

Hmm… E isso tudo fica dentro do meu método main, correto? Aliás, se eu quiser outras variáveis globais eu também coloco public static antes do tipo delas?

F

Rafael Guerreiro:
faelz1n:

Isso acontece pq o método Main é um método estático(static), então para você trabalhar seu vetor no método main você teria que criar esse vetor ou array estático, assim oh:

public static int[][] meuArray;

Hmm… E isso tudo fica dentro do meu método main, correto? Aliás, se eu quiser outras variáveis globais eu também coloco public static antes do tipo delas?

segue abaixo um algoritmo exemplificando:

public class Ex01{
     static int[][] meuArray;
     public static void main(String[] args) {
           Scanner s = new Scanner(System.in);
           System.out.println("Informe a quantidade de linhas.)"
           int linhas = s.nextInt();
           System.out.println("Informe a quantidade de colunas.)"
           int colunas = s.nextInt();
           meuArray = new int[linhas][colunas];
     }
}
Rafael_Guerreiro

faelz1n:

segue abaixo um algoritmo exemplificando:

public class Ex01{ static int[][] meuArray; public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("Informe a quantidade de linhas.)" int linhas = s.nextInt(); System.out.println("Informe a quantidade de colunas.)" int colunas = s.nextInt(); meuArray = new int[linhas][colunas]; } }

Eu tentei algo assim, só que sem o static antes do tipo do meu array…
Então todos os meus métodos também deverão ser static para poder modificar esse array?

faelz1n:

meuArray = new int[linhas][colunas];

nesse pedaço não ficaria assim:

meuArray[][] = new int[linhas][colunas];
F

Eu tentei algo assim, só que sem o static antes do tipo do meu array…
Então todos os meus métodos também deverão ser static para poder modificar esse array?

A resposta é sim, se você tem uma variável estática, você tem que trabalhar com ela em um método estático.

Você tbm tem outra solução aceitável, vou exemplificar:

class ex01{ int[][] meuArray; public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("Informe a quantidade de linhas"); int linhas = s.nextInt(); System.out.println("Informe a quantidade de colunas"); int colunas = s.nextInt(); new ex01().meuArray = new int[linhas][colunas]; } }

Rafael_Guerreiro

faelz1n:

A resposta é sim, se você tem uma variável estática, você tem que trabalhar com ela em um método estático.

Você tbm tem outra solução aceitável, vou exemplificar:

class ex01{ int[][] meuArray; public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("Informe a quantidade de linhas"); int linhas = s.nextInt(); System.out.println("Informe a quantidade de colunas"); int colunas = s.nextInt(); new ex01().meuArray = new int[linhas][colunas]; } }

Entendi, e desse segundo jeito parece ser mais completo e funcionaria para outras classes também?

F

sim, basta você dá um new ex01().meuArray[linhas][colunas] agora você tem que deixar a classe ex01 publica, ok?

qualquer dúvida estou a disposição.

pczardini

Ou talvez, voce não precise de editar diretamente de uma outra classe...

se não houver essa necessidade, ao criar um método de uma classe distinta, passe como parametro o proprio vetor, edite-o no método, e retorne o próprio vetor pelo método chamado.

Um pouco confuso :lol:

Tentando explicar:

public class NewClass {

    public int[][] modificaVetor(int vetor[][]){
       
         //Aqui voce faz as modificações que desejar!!
        
         return vetor;
    }
    
}

E na chamada desse método:

int linhas=10,colunas=10;
        int vetor[][] = new  int[10][10];
        NewClass nova = new NewClass();
        nova.modificaVetor(vetor);

Espero ter ajudado!!! :D

Rafael_Guerreiro

faelz1n:

sim, basta você dá um new ex01().meuArray[linhas][colunas] agora você tem que deixar a classe ex01 publica, ok?

qualquer dúvida estou a disposição.

Muito Obrigado, quando eu chegar em casa de noite eu irei testá-lo e se der tudo certo eu coloco o RESOLVIDO no título.

Rafael_Guerreiro

Obrigado a todos! Funcionou direitinho!

Usei deste jeito:

class Exe1
{
   static int [][] meuVetor; //fora do método

   public static void main (String args[])
   {
      int num;
      Scanner sc = new Scanner(System.in);
      System.out.println("Digite a quantidade de colunas: ");
      num = sc.nextInt();
      new Exe1().meuVetor = new int[3][num];
      // o programa continua...
   }
}
Criado 26 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 17
Participantes 4