oi pessoal
sou novo em java e aqui no forum
o professor da facul pediu que fizessemos um array de objetos,
eu criei a classe Conta corrente, com gets e sets, construtores normal e defull,
mais quando tento compilar esse código ele da erro:
[code]import java.util.Scanner;
public class AplicOO {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
int x =0;
System.out.println("Digite o tamanho dos vetores");
x = ler.nextInt();
int y = x*2;
ContaCorrente[] a = new ContaCorrente[x];
ContaCorrente[] b = new ContaCorrente[x];
ContaCorrente[] c = new ContaCorrente[y];
for (int i =0;i<a.length;i++) {
System.out.println("Digite o nome ");
a[i].setNome(ler.next());
System.out.println("Digite o numero da conta");
a[i].setNumeroConta(ler.next());
System.out.println("digite o saldo");
a[i].setSaldo(ler.nextFloat());
}
}
}
[/code]
e o erro que ocorre é este aqui:
Exception in thread “main” java.lang.NullPointerException
at trabalhoav1.AplicOO.main(AplicOO.java:17)
Java Result: 1
desde ja agradeço quem puder me ajudar.
Quando você instancia um array de objetos, todas as posições dentro dele estarão nulas. Antes de usá-las você tem que instanciar e colocar um objeto dentro delas.
1 curtida
Olá sfloid007.
Segue o codigo corrigido
import java.util.Scanner;
public class AplicOO {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
int x = 0;
System.out.println("Digite o tamanho dos vetores");
x = ler.nextInt();
//Aqui você declara um array de objetos do tipo Conta corrente e diz que o tamanho será x
ContaCorrente[] a = new ContaCorrente[x];
for (int i = 0; i < x; i++) {
/* Dentro do for é necessario que se crie um objeto do tipo conta corrente para que o mesmo
possa ser inserido dentro do array de objetos conta corrente.
Lembre que vc declarou um array de objetos do tipo Conta Corrente, então não faz sentido você tentar
inserir na primeira posição do array uma String, no caso o nome.
*/
//cria o objeto do tipo cc
ContaCorrente cc = new ContaCorrente();
//recebe atraves do teclado o nome e atribui ao atributo nome um valor.
System.out.println("Digite o nome ");
cc.setNome(ler.next());
//recebe atraves do teclado o numero e atribui ao atributo numeroConta um valor.
System.out.println("Digite o numero da conta");
cc.setNumeroConta(ler.nextInt()); // perceba que neste ponto você colocou um ler.next() que espera por uma String, no caso como o tipo
//da variavel numeroConta é int, então ele deve receber um nextInt();
//recebe atraves do teclado o saldo e atribui ao atributo saldo um valor.
System.out.println("digite o saldo");
cc.setSaldo(ler.nextFloat());
//aqui, inserimos o objeto contaCorrente a primeira posicao do array de contas.
a[i] = cc;
}
}
}
Aqui vai o codigo mais limpo:
import java.util.Scanner;
public class AplicOO {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
int x = 0;
System.out.println("Digite o tamanho dos vetores");
x = ler.nextInt();
ContaCorrente[] a = new ContaCorrente[x];
for (int i = 0; i < x; i++) {
ContaCorrente cc = new ContaCorrente();
System.out.println("Digite o nome ");
cc.setNome(ler.next());
System.out.println("Digite o numero da conta");
cc.setNumeroConta(ler.nextInt());
System.out.println("digite o saldo");
cc.setSaldo(ler.nextFloat());
a[i] = cc;
}
}
}
Fique sempre atento a tipagem.
Espero que ajude, qualquer duvida poste ai
1 curtida
Obrigado pessoal
voes me ajudaram muito
wlw.
Poxa, muito obrigada… eu também tinha um exercício parecido. Só que o meu ele disse que precisava inicializar cc [no caso]
ContaCorrente cc = new ContaCorrente(nome, cpf); // inicializando com os atributos do objeto no caso…
sem isso o BlueJ não “roda” corretamente ¬¬
Ele pede para inicializar porque neste caso no Objeto cc existe um contrutor que pede o nome e o cpf. Assim, toda vez que vc cria uma instancia da classe ContaCorrente, vc tem que colocar o nome e o cpf.