Olá gente, sou iniciante em Java e gostaria de saber um pouco mais sobre matrizes
por exemplo
eu tenho um String [] [] dados , como que vou fazer para solicitar ao usuário informações como nome , telefone etc
e como eles seriam “guardados” na matriz
Obrigada
import java.util.Scanner;
/**
*
* @author isaura
*/
public class ExemploMatrizes
{
public static void main(String[] args)
{
Scanner in = new Scanner (System.in);
final int L=2;
final int C=2;
String [][] dadosNome = new String[L][C]; // vai armazevar todos os dados do nome
String [] [] dadosTelefone = new String[L][C]; // Vai armazenar todos dados do telefone
String nome;
String telefone;
// Percorrendo a martriz e Inserindo seus dados
for ( int i = 0 ; i<L ;i++)
for ( int j =0 ; j<C ;j++)
{
System.out.println("Insira o nome:");
nome = in.next();
System.out.println("Insira o telefone:");
telefone = in.next();
dadosNome[i][j] = nome;
dadosTelefone [i][j] = telefone;
}
//Impressao dos elementos que estao na matriz:
for ( int i = 0 ; i<L ;i++)
for ( int j =0 ; j<C ;j++)
{
System.out.println("dadosNome["+i+"] ["+j+"] ="+dadosNome[i][j]);
System.out.println("dadosTelefone"+i+"] ["+j+"] ="+dadosTelefone[i][j]);
}
}
}
Obrigadaa , vou usar como base
O importante é você entender que trabalhar com matrizes envolve duas coisas: declarar a matriz e inicializar ela, e referenciar ela.
Para declarar, você usa:
tipo + [ ] + nome da variável
Se você está trabalhando com matriz de uma só dimensão (ou seja, um vetor, vai ter só um conjunto de “[ ]”):
String[ ] minhaMatriz;
Se for de duas dimensões:
String[ ] [ ] minhaMatriz;
Se for de três de dimensões:
String[ ] [ ] [ ] minhaMatriz;
Se for de quatro dimensões… bem… você já entendeu.
A seguir você precisa inicializar ela. Entenda: ao criar a variável, você só diz que um dia ela poderá ser usada, mas não reserva (alocar) espaço na memória para ela ser preenchida. Por isso você precisa instanciar a variável. Exemplo de duas dimensões:
String[ ][ ] minhaMatriz = new String[A] [B];
Quando você faz isso, você:
- Avisou ao compilador que está criando uma matriz, de duas dimensões, cujo conteúdo serão strings (“String [ ] [ ]”)
- Avisou que o nome da variável é “minhaMatriz”
- Instanciou a variável;
- Especificou que a variável “minhaMatriz” vai ter “A” linhas e “B” colunas.
A partir de então é só preencher as posições da matriz, referenciando sempre as linhas e colunas. Exemplos:
a) se você quiser um elemento da primeira linha, décima coluna, você usaria “minhaMatriz[1][10]”;
b) um elemento na terceira linha, segunda coluna ficaria “minhaMatriz[3][2]”.
Depois de entender isso é só preencher a sua matriz e depois ler os elementos. Moleza.
O código da Isaura está bem simples, mas serve para te orientar que você deve interagir com o usuário antes de cada entrada de dados.
Ao invés de L e C, como são idênticos (já que você tem que ter a mesma quantidade de nomes/telefones) eu utilizaria apenas “int registro = 2”; mas isso é questão pessoal e ambas as formas chegam no resultado desejado.
Por fim, lembre de fechar o scanner “in.close();” para não deixar isso por conta da JVM. Em códigos maiores pode gerar resultados inesperados.
Se precisar de outras dicas, volta por aqui. Tente ser específica nas suas perguntas, para facilitar as respostas. A ideia é te ajudar a aprender, não necessariamente dar os códigos prontos.
Desejo excelentes estudos! Seja bem vinda ao Java!
Muito Obrigadaa pela sua explicação
Disponha! E seja muito bem vinda ao fórum. Se precisar de ajuda, pode postar.
Lembre, no futuro, quando interagir com o usuário e for coletar dados, de proteger o teu código com blocos try/catch
. É importante porque, por exemplo, se você pedir um número inteiro e o usuário digitar uma palavra, vai dar erro. Por isso a gente trata as exceções com blocos try/catch
. Isso é alguns passos adiante, você vai chegar lá.
A teoria é simples, é algo tipo:
try {
// aqui vão os comandos que o sistema tem que fazer
} catch (Exception erro) { // aqui a identificação do erro, existem vários tipos
System.out.println(erro); // aqui mostra qual o erro
// aqui vão os comandos caso der erro
} finally {
// e aqui vão os comandos que vão ser executados de qualquer forma, dando erro ou não
}
Bons estudos!
PS: E quando estiver com mais experiência, lembre de ajudar os novatos.
Deixa eu te perguntar
public String busca(String nome){
JOptionPane.showInputDialog(null,"Digite o nome para procurar: " + nome);
//for (int i = 0; i < dados.length; i++) {
for (String[] dado: dados) {
if (dados.equals(nome)) {
JOptionPane.showMessageDialog(null, dado[0] + " " + dado[1]);
return dado[0];
} else{
JOptionPane.showMessageDialog(null,“Sem Cadastro!”);
}
}
nesse bloco ele cai diretamente no else vc sabe me dizer se tem algum erro nele?
Tecnicamente era melhor criar um novo tópico para cada dúvida nova.
Mas vamos lá… posta aqui o código completo que eu dou uma olhada.
import java.util.ArrayList;
import javax.swing.JOptionPane;
import java.util.Scanner;
public class Agenda {
private String[][] dados;
Agenda() {}
public Agenda(String dados [][]){
setDados(dados);
}
public String[][] getDados() {
return dados;
}
public void setDados(String[][] dados) {
this.dados = dados;
}
public void entDados() {
String nome;
String telefone;
int dadosLenght = 0;
Scanner entrada = new Scanner(System.in);
System.out.println("Digite o nome: ");
nome = entrada.nextLine();
System.out.println("Digite o telefone: ");
telefone = entrada.nextLine();
String[][] newDados = new String[dadosLenght + 1][2];
for (int i = 0; i<dadosLenght; i++) {
newDados[i] = getDados()[i];
}
newDados[dadosLenght][0] = nome;
newDados[dadosLenght][1] = telefone;
setDados(newDados);
}
public void imprimir(){
for (String[] dado: dados) {
JOptionPane.showMessageDialog(null,"Dados da agenda: " + "\n" + "Nome: " + dado[0] + "\n" + "Telefone: " + dado[1]);
}
}
public String busca(String nome){
JOptionPane.showInputDialog(null,"Digite o nome para procurar: " + nome);
for (String[] dado: dados) {
if (dados.equals(nome)) {
JOptionPane.showMessageDialog(null, dado[0] + " " + dado[1]);
return dado[0];
} else{
JOptionPane.showMessageDialog(null,"Sem Cadastro!");
}
}
return "";
}
}
main
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JOptionPane;
public class TestaAgenda {
public static void main(String[] args) {
Agenda ag = new Agenda();
ag.entDados();
ag.imprimir();
String nome = null;
ag.busca(nome);
}
JOptionPane.showInputDialog(null,"Digite o nome para procurar: " + nome);
Isso está errado. Você precisa atribuir a entrada do usuário a um valor.
Exemplo:
String nomeProcurar = JOptionPane.showInputDialog(null,"Digite o nome para procurar: " + nome);
Se você quer atribuir o nome original, passado como parâmetro da função, já para “pré-preencher” a caixa, então o código ficaria:
String nomeProcurar = JOptionPane.showInputDialog(null,"Digite o nome para procurar: ", nome);
Vou olhar o resto do código.
Deveria ser “dado” ao lugar de “dados”:
for (String[] dado: dados) {
if (dado.equals(nome)) {
Porque você cria a variável “dado” que será a que vai correr tua função de verificações, e ela recebe da original “dados”, por isso o “equals” precisa ser com “dado”, não com “dados”.
Obrigadaa, consegui arrumar aqui