Estou começando a programar em java ao invés de C, e recebi um desafio de um professor para fazer um algoritmo especifico… Mas estou com dificuldade na parte de ter uma array dentro de uma classe, sem que eu tenha um valor definido.
Tentei de diversas formas e obtive varios erros diferentes, no geral NullPointerException ou um outro que não me lembro.
Aqui esta um dos últimos que sobreviveram a massa de apaga/escreve, sei que tem diversos erros e ta bem mal organizado (eu tentei fazer de tudo pra conseguir que rodasse).
Bom, oque eu estou tentando é criar um Estado que aponta pra outro Estado a partir de A ou de B, porém pode ser que não tenha partida de A e nem B, ou que tenha mais de uma partida de qualquer um. O numero de Estados máximo que poderá ser criado no programa é 5 (0 a 4), cada um apontando entre eles. No final eu tenho que saber quais Estados o Estado[0]…[4] apontam.
Para evitar recursividade (que é oque eu faria em C), tentei só pegar o numero do estado que cada um aponta… ja que tenho um numero definido e tal… mas estou com problema para atribuir um valor a uma posição do array, acredito que seja porque não criei ele corretamente na classe… Alguém poderia me dar uma luz !?
Bloco de citação
public class Estado
{
private int nA, nB;
private int[] A, B;
// tam = numero de estados, que no maximo é 5
public Estado(int tam) { int A[] = new int[tam]; int B[] = new int[tam]; nA = 0; nB = 0; }
// inserir valores
public void setA(int x) { A[nA++] = x; }
public void setB(int x) { B[nB++] = x; }
public void set2(int x, int y) { A[nA++] = x; B[nB++] = y; }
// receber valores
public int getTamA() { return nA; }
public int getTamB() { return nB; }
public int getA(int pos) { return A[pos]; }
public int getB(int pos) { return B[pos]; }
Não sei se deveria mostrar oque estava testando para rodar na main mas esta aqui:
Eu coloquei menor que 4 nos ‘for’ e 4 no ‘new Estado’, pra poupar ter que fazer entrada do limite … ja que eram apenas testes, esta longe do programa pronto
public static void main(String[] args)
{
java.util.Scanner teclado = new java.util.Scanner(System.in);
int quant;
Estado q[] = new Estado[4];
for(int i=0; i<4 ; i++)
{
q[i] = new Estado(4);
}
for(int i=0; i<4 ; i++)
{
System.out.printf("\nQuantas vezes sai (A) de Q%d [NUMERO] -> ", i);
quant = teclado.nextInt();
teclado.nextLine();
for(int j=0; j<4 ; j++)
{
if(j<quant)
{
System.out.printf("\nDe Q%d com (A) pode ir para... [NUMERO] -> q", i);
q[i].setA(teclado.nextInt());
teclado.nextLine();
}
}
System.out.printf("\nQuantas vezes sai (B) de Q%d [NUMERO] -> ", i);
quant = teclado.nextInt();
teclado.nextLine();
for(int j=0; j<4 ; j++)
{
if(j<quant)
{
System.out.printf("\nDe Q%d com (B) pode ir para... [NUMERO] -> q", i);
q[i].setB(teclado.nextInt());
teclado.nextLine();
}
}
}
}
@confuso . Eu consegui resolver a parte que eu estava, mas não sei se é por ser uma coisa nova que aprendi (ArrayList) ou se é pq estou complicando demais as coisas … Eu fiz um bloco de notas pra poder fazer os testes do programa depois e poder entender como programar …
PS:
‘*’ é quando encontra um tipo novo (tem q criar uma solução pra esse tipo)
<2><3> é a mesma coisa que <3><2>
---- significa que não existe nada (não coloca nada)
ficou meio ruim, mas cada ‘|’ é uma separação… é uma tabela… Eu criei uma matriz de nx2 ArrayList que chamei de ‘E’, sendo n o numero de estados e 2 pra cada vetor ficar com os valores de A e outro pra os de B, e inseri todos os valores… Porém não consigo chegar numa solução para conseguir um vetor de mx2 ArrayList ‘S’ que siga o padrao da tabela de solução, sendo q m eu não sei quanto é mas é entre 1 a 2^n (oq n faz mta diferença kkkk) … Mas acredito que essa pergunta seja pra outro tópico, se puder me ajudar, ficaria grato, sinão eu tento mais um tempo e se não conseguir eu crio um tópico sobre …
Acho que consegui, só estou tendo problema pra encerrar o programa … Eu não sei como comparar se o conteúdo de uma ArrayList é igual a outra ArrayList (no meu caso é a mesma ArrayList só que em vetores diferentes, algo como if(S[x][0].toArray == S[x+1][0].toArray), pra verificar todo o conteúdo dela e ver se esta igual … Só que se por exemplo na primeira array tiver “2” e “4” e na segunda tiver “4” e “2” tem que dar como igual, oque eu quero é que o conteúdo seja o mesmo, não precisa ser a mesma ordem
Que bom que conseguiu. Desculpa não ter conseguido ajudar na dúvida anterior.
Apesar de custar um pouquinho mais em termos de performance do que um equals() comum, você pode fazer isso pra comparar o conteúdo de duas listas não importando a ordem:
List<Integer> minhaLista1 = Arrays.asList(4, 3); // Uma lista com 3 e 4
List<Integer> minhaLista2 = Arrays.asList(3, 4); // Outra lista com 4 e 3
Collections.sort(minhaLista1);
Collections.sort(minhaLista2);
boolean ehIgual = minhaLista1.equals(minhaLista2);
System.out.println("A lista é igual? RESPOSTA: " + ehIgual);
Mas nesse caso a quantidade de cada elemento importa, tudo bem? Ou a quantidade também não pode importar? Por exemplo [3, 3, 4] e [4, 3] vão ser considerados diferentes.