Boa noite, sou estudante de ADS e estou com dúvida em relação a retornar a posição de um elemento na matriz
A pergunta “c. Um método que receba como parâmetro um determinado valor e retorne o índice da(s) linha(s) e coluna(s) onde o elemento foi encontrado na matriz.”
Fiz o seguinte código
public int contarValor(int numero){
int cont=0;
for(int linhas=0;linhas<matriz.length;linhas++){
for(int colunas=0;colunas<matriz[linhas].length;colunas++){
if(matriz[linhas][colunas]== numero){
cont++;
}
}
}
return cont;
}
public int[][] returnPos(int numero){
int[][]valor=new int[contarValor(numero)][contarValor(numero)];
int aux=0;
int aux2=0;
for(int linhas=0;linhas<matriz.length;linhas++){
for(int colunas=0;colunas<matriz[linhas].length;colunas++){
if(matriz[linhas][colunas]==numero){
valor[aux][aux2]=colunas;
valor[aux][aux2]=linhas;
aux++;
aux2++;
}
}
}
return valor;
}
para procurar usando o jframe coloquei essa função no botão
int numero = Integer.parseInt(JOptionPane.showInputDialog(null,“Qual número deseja procurar?”));
String resultado="";
for(int i=0;i<construtor.returnPos(numero).length;i++){//linha
for(int k=0;k<construtor.returnPos(numero).length;k++){//colunas
resultado=resultado+construtor.returnPos(numero)[i][k]+"\t";
}
}
jTAResultado.setText(construtor.dados()+"\nIndices iguais ao valor inseiro: " + resultado);
Gerei aleatoriamente uma matriz rodando o sistema 4x5
3 7 5 4 4
6 3 0 4 6
0 2 1 4 8
1 5 0 4 7
E pedi parar procurar o número 4, pelo que entendi do problema era pra retornar o número 4 na linha 0 e coluna 3 , linha 0 linha 4 e assim por diante.
No método procurarItem você declarou como vetor, nesse caso de procurar algo dentro de matriz não pode ser outra matriz? E por que um vetor com 3 elementos?
Como diria o meu professor: “Uma coisa para cada coisa”. Eu preciso retornar:
1 - a linha
2 - a coluna
3 - o valor indicado pela linha e pela coluna.
Para que eu faria uma matriz 3 x 1? Não é mais inteligente fazer um simples vetor de 3 posições? A menos que o problema exija como retorno uma matriz, não vejo necessidade lógica. Eu preciso retornar três valores. Na grande maioria das linguagens de programação, há somente um retorno. Logo, para retornar três valores, eu retorno um único vetor com os meus três valores.
A única função do botão seria, pelo menos a meu ver, chamar o método para ele fazer a sua parte, ou seja, os métodos devem ter pouca responsabilidade (resolver uma pequena parte do problema maior), mas resolver bem. Logo, o handler do botão (manipulador do evento) deve se ocupar com outras coisas, como por exemplo, simplesmente chamar o método conveniente para resolver uma porção do problema.
Eu entendi mas no tempo de réplica sua fui tentando e resolvi dessa forma.
Fiz um métodos para contar os valores.
public int contarValor(int numero) {
int cont = 0;
for (int linhas = 0; linhas < matriz.length; linhas++) {
for (int colunas = 0; colunas < matriz[linhas].length; colunas++) {
if (matriz[linhas][colunas] == numero) {
cont++;
}
}
}
return cont;
}
E para retornar posição fiz isso.
public String returnPos(int numero) {
StringBuilder valor = new StringBuilder();
for (int linhas = 0; linhas < matriz.length; linhas++) {
for (int colunas = 0; colunas < matriz[linhas].length; colunas++) {
if (matriz[linhas][colunas] == numero) {
valor.append("\nColuna: “).append(colunas + 1).append(”\nLinha: “).append(linhas + 1).append(”\n");
}
}
}
return valor.toString();
}
e chamei isso no botão
te void jBPosicaoActionPerformed(java.awt.event.ActionEvent evt) {
int numero = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual número deseja procurar?"));
if(construtor.contarValor(numero) > 0){
jTAResultado.setText(construtor.dados() +"\nO número procurado foi: " + numero + "\nO valor foi encontrado nas posições: "+ construtor.returnPos(numero));
}
else{
jTAResultado.setText(construtor.dados()+"\nO valor não foi encontrado");
}