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 Pavolin9
      Bom dia, estou desenvolvendo um sistema bem simples de estoque onde os itens serao armazenados em uma matriz segue codigo:
          package main;          import java.io.Console;     import java.util.Arrays;     import java.util.Scanner;          public class IncluirItem{         public static void main(String[] args) {             String[][] itens = new String[2][5];             String[] campos = new String[7];             int opcao = 0;             int remover;             int verificar = 0;             int adcionar = 0;             int tamanho = 2;                          Scanner sc = new Scanner(System.in);                          campos [1] = "Nome";             campos [2] = "Codigo de barras";             campos [3] = "quantidade";             campos [4] = "validade";             campos [5] = "data de entrada";                          do {                 System.out.println("\n\n### Sistema de estoque - simplificado ###");                 System.out.println("=========================================");                 System.out.println("      |     1 - Adcionar itens   |");                 System.out.println("      |     2 - Excluir itens    |");                 System.out.println("      |     3 - Mostrar itens    |");                 System.out.println("      |     0 - Sair             |");                 System.out.println("=========================================\n");                                  System.out.println("Escolha uma opcao: ");                 opcao = sc.nextInt();                 System.out.print("\n");                                  switch (opcao) {                 case 1:                     System.out.println("Cadastro de itens: ");                     //Adciona itens                      for (int i = 0; i <2; i++) {                         System.out.println("Adcionar item? ");                         System.out.println("1 para sim \n2 para nao: ");                         adcionar = sc.nextInt();                         if (adcionar == 1) {                             System.out.printf("%d. item \n", (i+1));                             verificar = verificar + 1;                             for (int j=0; j < 5; j++) {                                     System.out.printf("%s ", campos[j+1]);                                 System.out.printf("= ", i,(j+1));                                 itens[i][j] = sc.next();                                                              }                             System.out.printf("\n");                         }                         else {                             break;                         }                     }                                              break;                 case 2:                     //Remove itens                     System.out.println("Exclusao de itens: ");                     if(verificar > 0) {                         for (int i = 0; i <2; i++) {                                 System.out.printf("%d. item \n", (i+1));                             System.out.printf("ID do produto= 00%d \n", (i+1));                             System.out.printf("\n");                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                     System.out.println("\nEscolha o numero do item a ser removido: \n");                     remover = sc.nextInt();                     for (int i = 0; i <2; i++) {                         if(remover == 2) {                         itens[i] = itens[i-1];                         }                     }                     break;                 case 3:                     //Mostra itens                     if(verificar > 0) {                                                      for (int i = 0; i <2; i++) {                                     if (verificar == 2) {                                 System.out.printf("%d. item \n", (i+1));                                 System.out.printf("ID do produto= 00%d \n", (i+1));                                 for (int j=0; j < 5; j++) {                                         System.out.printf("%s ", campos[j+1]);                                     System.out.printf("= %s \n", itens [i][j]);                                 }                                 System.out.printf("\n");                             }                             else {                                         itens = Arrays.copyOf(itens, tamanho - 1);                                         verificar = 0;                                         System.out.printf("%d. item \n", (i+1));                                         System.out.printf("ID do produto= 00%d \n", (i+1));                                         for (int j=0; j < 5; j++) {                                                 System.out.printf("%s ", campos[j+1]);                                             System.out.printf("= %s \n", itens [i][j]);                                         }                                         System.out.printf("\n");                                         break;                                 }                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                                          break;                 default:                     System.out.println("Opção Inválida!");                     break;                 }             } while(opcao != 0);         }     }  
      Minha duvida é a seguinte, eu quero excluir uma posicao da matriz, exemplo: registrei dois itens, na coluna um e coluna dois da matriz e gostaria de remover a coluna um da lista, como realizo essa função, e outra coisa, eu gostaria de quando eu inserisse pela segunda vez algum item a matriz começasse na proxima possicao vazia, atualmente se eu pedir para inserir um novo item a matriz começa da primeira posicao e assim apaga os elementos ja inseridos.
       
    • By Alisson Hoepers
      Olá pessoal! Para mostrar a lista de um cadastro no meu sistema, eu populo a consulta em um DTO conforme abaixo. Minha pergunta é: Existe uma forma mais simples de popular a consulta na lista do DTO de forma mais simples?
       
      public List<ObjetoDTO> find(Query query) {     @SuppressWarnings("unchecked") List<Object[]> queryResult = query.getResultList(); List<ObjetoDTO> list = new ArrayList<>(); if (queryResult.isEmpty() == false) { for (Object[] item : queryResult) { ObjetoDTO dto = new ObjetoDTO(); dto.setId((Integer) item[0]); dto.setTitulo((String) (item[1])); dto.setDescricao((String) (item[2])); list.add(dto); } } return list; }  
    • By NaPraia
      Beleza pessoal?
       
      seguinte, tenho que desenvolver uma aplicação Java para me comunicar com outro sistema, via Adapter.
      Qual é a melhor forma de fazer isso?
       
      Eu comecei a desenvolver no Eclipse, porém, quando abri o projeto, não coloquei nem com opção de Webservice nem de Maven
       
      E outra dúvida, se instala o Java em servidor? um cara falou isso aqui mas não sei se está zuando.
    • By Luiz Henrique de Sousa
      Estou utilizando rich faces e seu componente JQuery, para realizar formatação de campos decimais, estou utilizando o maskMoney e atribui uma precisão de 3 casas no meu input text, e tenho um campo disabled que é booleano, ele é acionado caso tenha mais coisas associadas a outro item no form abaixo, mesmo sabendo que a função disabled é apenas vísivel ela não faz nada de diferente, quando a minha função disabled é acionada tem como eu tirar as casas decimais dela.
      Fiz dessa forma abaixo:
       
      <f:facet name="header"> <h:outputLabel value="#{messages.conversion}"/> </f:facet> <h:inputText id="fldConversion" value="#{row.vlConversion}" label="#{messages.conversion}" maxLength="25" disabled="#{defaultMBean.canDisabledConversion(row)}"> <a4j:ajax event="change" immediate="true" render="@all, partnerItem, dataModel"/> <f:converter converterId="javax.faces.BigDecimal"/> <f:validateLength maximum="30" /> </h:outputText> <rich:jQuery selector="#fldConversion" query="maskMoney({decimal:''.'',allowNegative:false, showSymbol:false, thousands: '''',precision: 3})"/> E criei esse método para quando estiver desativado o campo:
       
      public BigDecimal canDisableConversionE(TypeDTO row) { BigDecimal r = row.getConversionValue().setScale(0, RoundingMode.HALF_EVEN); System.out.println(r); return r; } public Boolean canDisableConversion(TypeDTO row) { if (row.getId() == 1L && !canDisableConversionE()) { return false; } if (IsWeight(row.getId())) { return true; } return getConfigFacade().canDisableConversionE(row.getConversionValue()); }  
    • By NaPraia
      Olá, estou tentando gerar um arquivo em PDF, mas ele já está dando erro na primeira linha, no comando de import
       
      import com.itextpdf.text.Document; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter;     public class Arquivo2704 {                 public static void main (String[] args) {                               Document document = new Document();               try {                     PdfWriter.getInstance(document, new FileOutputStream("C:\\a1.pdf"));                     document.open();                     document.add(new Paragraph("Hello World"));                 }                  catch(DocumentException de) {                     System.err.println(de.getMessage());                 }                  catch(IOException ioe) {                     System.err.println(ioe.getMessage());                 }                  //document.close();    } }
      Alguém pode me ajudar?
      obrigado            
×

Important Information

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