Jump to content
Leonardo B. Tosin

Inserir uma classe dentro de outra classe como parâmetro

Recommended Posts

public class Aluno
{
    String nome;
    String cpf;
    Curso curso;
}
public class Curso
{
    String nome;
    String codigo;
    String turno;
}
import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
       Scanner input;
       input = new Scanner(System.in);
       int opc = 1;
       Aluno[] cadastro = new Aluno[10];
       Curso[] c = new Curso[10];
       int count = 0;
       int cont = 0;
       
       while (opc != 0 ) {
           System.out.println("1- Cadastrar Aluno: ");
           System.out.println("2- Imprimir Cadastros: ");
           System.out.println("3- Cadastrar Curso: ");
           System.out.println("4- Imprimir Cursos: ");
           System.out.println("Outra tecla - Sair");
           opc = input.nextInt();
           
           if(opc == 1) {
               if(c == null || c.length == 0){  
                 System.out.println("Deves antes cadastrar um curso!");
                 return;
               }
               
               
               Aluno al = new Aluno();
               System.out.println("Nome: ");
               input.nextLine();
               al.nome = input.nextLine();
               System.out.println("CPF: ");
               al.cpf = input.nextLine();
               System.out.println("Código do Curso: ");
               al.curso.codigo = input.nextLine();
                     
               cadastro[count] = al;
               
               
               count++;
           } else if (opc == 2){
               
                for(int i = 0; i<count;i++) {
                    System.out.println(cadastro[i].nome);
                    System.out.println(cadastro[i].cpf);
                    System.out.println(cadastro[i].curso.codigo);
                    System.out.println(cadastro[i].curso.nome);
                    System.out.println(cadastro[i].curso.turno);
                }
               
           } else if (opc == 3) {
                Curso cs = new Curso();
                System.out.println("Nome do curso: ");
                input.nextLine();
                cs.nome = input.nextLine();
                System.out.println("Código: ");
                cs.codigo = input.nextLine();
                System.out.println("Turno: ");
                cs.turno = input.nextLine();
                c[cont] = cs;
                
                
                cont++;
            
            } else if(opc == 4) {
                
                 for(int i = 0; i<cont;i++) {
                    System.out.println(c[i].nome);
                    System.out.println(c[i].codigo);
                    System.out.println(c[i].turno);
                }
            
            } else {
                opc = 0;
            }
        } 
    }
}

 

Meu problema está sendo quando no main, opc == 1, vou atribuir os parametros para a classe al, no al.curso.codigo quando compilo está dando NullPointerException. Acho que estou fazendo errado, queria entender como eu atribuo valores para o parametro curso da classe Aluno.

Desde já agradeço.

Share this post


Link to post
Share on other sites

Creio eu que o erro seja o seguinte: Na linha "al.curso.codigo" você está acessando o objeto Aluno, que você chamou de al, e dentro dele você tenta acessar o Curso do Aluno(al), porém, você não cria o Curso do Aluno(al) e mesmo sem criar você tenta acessa-lo... E isso está causando o NullPointerException.

 

Para consertar, antes de você tentar acessar o "al.curso.codigo" crie o objeto Curso: 

al.curso = new Curso();

Caso não tenha entendido, aqui vai a sua classe Main com o erro consertado(eu testei):


import java.util.Scanner;

public class Main{
	
	public static void main(String[] args) {
		Scanner input;
		input = new Scanner(System.in);
		int opc = 1;
		Aluno[] cadastro = new Aluno[10];
		Curso[] c = new Curso[10];
		int count = 0;
		int cont = 0;

		while (opc != 0 ) {
			System.out.println("1- Cadastrar Aluno: ");
			System.out.println("2- Imprimir Cadastros: ");
			System.out.println("3- Cadastrar Curso: ");
			System.out.println("4- Imprimir Cursos: ");
			System.out.println("Outra tecla - Sair");
			opc = input.nextInt();

			if(opc == 1) {
				if(c == null || c.length == 0){  
					System.out.println("Deves antes cadastrar um curso!");
					return;
				}


				Aluno al = new Aluno();
				al.curso = new Curso();
				System.out.println("Nome: ");
				input.nextLine();
				al.nome = input.nextLine();
				System.out.println("CPF: ");
				al.cpf = input.nextLine();
				System.out.println("Código do Curso: ");
				al.curso.codigo = input.nextLine();

				cadastro[count] = al;


				count++;
			} else if (opc == 2){

				for(int i = 0; i<count;i++) {
					System.out.println(cadastro[i].nome);
					System.out.println(cadastro[i].cpf);
					System.out.println(cadastro[i].curso.codigo);
					System.out.println(cadastro[i].curso.nome);
					System.out.println(cadastro[i].curso.turno);
				}

			} else if (opc == 3) {
				Curso cs = new Curso();
				System.out.println("Nome do curso: ");
				input.nextLine();
				cs.nome = input.nextLine();
				System.out.println("Código: ");
				cs.codigo = input.nextLine();
				System.out.println("Turno: ");
				cs.turno = input.nextLine();
				c[cont] = cs;


				cont++;

			} else if(opc == 4) {

				for(int i = 0; i<cont;i++) {
					System.out.println(c[i].nome);
					System.out.println(c[i].codigo);
					System.out.println(c[i].turno);
				}

			} else {
				opc = 0;
			}
		} 
	}
	
}

 

  • Gostei 1
  • +1 1

Share this post


Link to post
Share on other sites

Entendi sim, valeu pela ajuda. Consegui de outro jeito também, setando já toda a classe curso em aluno de uma vez só (al.curso), que pensando pela sua expolicação é quase a mesma coisa, mas pelo menos entendi, pois não entendia porque desse jeito tinha dado certo. Mas, agora garanto que não ocorra novamente o erro.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Mad_Max
      Estou lendo o livro do waldemar neto sobre nodejs, e tem uma parte que não consigo sair, fiz uma configuração para rodar um teste  na minha aplicação, baixei os modules que o livro pediu: mocha, chai e p supertest e no meu package.json coloquei o seguinte script: 
       
      "test:integration": "NODE_ENV=test mocha --opts test/integration/mocha.opts test/integration/**/*_spec.js"  
      so que quando eu rodo com o npm run dev tes:integration como o livro mandou me aparece esse erro:
       
      > api-loja-virtual@1.0.0 test:integration /home/ed/projeto/api-loja-virtual
      > NODE_ENV=test mocha --opts test/integration/mocha.opts test/integration/**/*_spec.js
      /home/ed/projeto/api-loja-virtual/node_modules/mocha/lib/cli/options.js:209
            throw new Error(`Unable to read ${filepath}: ${err}`);
            ^
      Error: Unable to read test/integration/mocha.opts: Error: ENOENT: no such file or directory, open 'test/integration/mocha.opts'
          at loadMochaOpts (/home/ed/projeto/api-loja-virtual/node_modules/mocha/lib/cli/options.js:209:13)
          at loadOptions (/home/ed/projeto/api-loja-virtual/node_modules/mocha/lib/cli/options.js:310:22)
          at Object.<anonymous> (/home/ed/projeto/api-loja-virtual/node_modules/mocha/bin/mocha:29:14)
          at Module._compile (internal/modules/cjs/loader.js:776:30)
          at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
          at Module.load (internal/modules/cjs/loader.js:643:32)
          at Function.Module._load (internal/modules/cjs/loader.js:556:12)
          at Function.Module.runMain (internal/modules/cjs/loader.js:839:10)
          at internal/main/run_main_module.js:17:11
      npm ERR! code ELIFECYCLE
      npm ERR! errno 1
      npm ERR! api-loja-virtual@1.0.0 test:integration: `NODE_ENV=test mocha --opts test/integration/mocha.opts test/integration/**/*_spec.js`
      npm ERR! Exit status 1
      npm ERR! 
      npm ERR! Failed at the api-loja-virtual@1.0.0 test:integration script.
      npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
      npm ERR! A complete log of this run can be found in:
      npm ERR!     /home/ed/.npm/_logs/2019-07-18T23_16_05_549Z-debug.log
       
      oque pode ser ??
       
      segue o github para baixar o code: https://github.com/MAdMAX-io/API-loja-virtual
    • By TaisStream
      Como configurar essa query com inner join, no arquivo .xml?
      Me ajudem pf eu comecei mas estou perdida,  pesquisei já vi algo de /root... mas minha query esta diferente, nao sei se falta algo
       
       
      QUERY ATUAL:
      set mapreduce.job.queuename=low_relatorios; 
      set mapreduce.job.max.split.locations=100;
      SELECT a.num_msisdn,
             a.max_date
      FROM fact.dw_f_rcrg_gems_rate_subsc t
      INNER JOIN
        (SELECT num_msisdn,
                MAX(dat_operacao) AS max_date
         FROM fact.dw_f_rcrg_gems_rate_subsc
         WHERE (ref_date)>=$startdate
           AND ref_date<=$finaldate
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
      AND a.max_date = t.dat_operacao
      WHERE ref_date>=$startdate
      AND ref_date<=$finaldate;
       
      QUERY CONFIGURANDO NO XML: 
       
          <value><![CDATA[[
      INSERT
              overwrite TABLE fact.dw_f_rcrg_gems_rate_subsc t 
              (
                      a.num_msisdn,
                      a.max_date
              )
      (SELECT
          INNER JOIN
      SELECT      
              MAX(dat_operacao) AS max_date;
      FROM fact.dw_f_rcrg_gems_rate_subsc) a
         WHERE (ref_date)>='$startdate'
           AND ref_date<=$'finaldate'
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
                  AND a.max_date = t.dat_operacao
      WHERE ref_date>='$startdate'
      AND ref_date<=$finaldate;]]>
      </value>
       
       
      Poderiam me ajudar por favor, sou estagiario na area e ainda estou aprendendo.
    • By Lucas Galvanini
      Quais frameworks vocês já utilizaram para desenvolver pra Raspberry pi?
      Algum deles é Java?
       
      Fiquei sabendo recentemente de um framework gratuito pra Raspberry chamado TotalCross (www.totalcross.com)
      Me disseram que é bem fácil de usar e tem um footprint bem otimizado.
    • By michael450
      Senhores, boa tarde.
       
      Estou com um probleminha... rss', preciso fazer a listagem de uma função da biblioteca "SPED-NFe"   na qual consulto quais as NFe que emitiram contra meu CNPJ, porém o ele executa toda a função e depois me trás o resultado, eu gostaria de trazer o resultado instantaneamente, como se fosse uma atualização segundo a segundo.
       
       
      Essas informações não são salvas em DB, é apenas para consulta.
      Se alguém puder ajudar serei muito grato,
       
      Abraço.
       
      Michael Douglas
    • By MateusOFCZ
      Olá, estou desenvolvendo um projeto de registro de clientes em java no netbeans e usando o MySQL Workbench e Xampp, gostaria de saber se é possível fazer com que o programa fique verificando se está conectado com o banco de dados, e caso não esteja ele mostra uma mensagem pedindo para o usuário se conectar em uma rede, caso ele se conecte o programa irá esconder essa mensagem e funcionará normalmente.

      Eu consegui fazer com que ele mostre se está conectado ou não, porém se eu desligar o servidor ele não atualiza mostrando que está offline, ele continua como online...
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.