GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problemas para criação de Matrizes


#1

Bom pessoal, estou fazendo um curso de Java basico, porem devido a alguns problemas no decorrer do curso, não tive uma base solida de comando e programação.

Agora um professor passou um exercicio em que devo fazer uma matriz, que Ao final da digitação, todos os funcionários informados devem ser exibidos da seguinte forma : nome, cargo, salário anterior e salário atual. Deve ser exibida também a informação de quanto foi a diferença de valores entre o antigo salário e o novo.

Porem eu não tive base NENHUMA de como fazer Matrizes em Java. A Parte de Algoritmo eu faço que é uma maravilha, mas na hora de fazer o programa, não sei como fazer uma Matriz.

Não sei se isso parece besteira ou não, mas estou tendo uma dificuldade tremenda pra conseguir fazer o exercicio. A base do programa, que pede nome do funcionário, salario e tudo mais está feita, só não consegui fazer a parte em que tenho que criar a Matriz e colocar os dados dentro da Matriz.

Olhando uns outros posts no aqui fórum, começei a ter umas ideias +/-.

Tenho nas minhas variaveis a seguinte linha:

int [][] I = new int [4][TotInf];

Onde TotInf representa o total de pessoas informadas pelo Usuario.

Está certo isso? Como colocar os dados dentro da matriz?

A sim, lembrando que o Professor em questão proibiu o uso do "javax.swing", falando que precisamos saber como funciona o Java antes de o usar. (Não entendi nada, mesmo porque eu só aprendi como fazer o programa usando o javax.swing >.<).

Quem puder ajudar, agradeço desde já ^^


#2

Provavelmente a pribição do swing deve ser por causa da "interface" com o usuario.Aquelas janelas que ficam abrindo na tela e pedindo informação.
Ex:http://www.faculdadepuc.xpg.com.br/mensagens.html

Com relação ao trabalho:

Declaração de matriz esta certa:

int matriz[ ][ ] = new int[ 4 ][Toinf ];

Para preencher a matriz vc vai precisar percorrer ela toda, ou seja, você vai precisar de 2 estruturas de repetição.Neste caso o mais usado é o for( ){}.
ATENÇÂO: Tem como melhorar esta inserção de dados pois ( nome, cargo, salário anterior e salário atual ) e o valor 4 esta fixo porque sua matriz é de 4 linhas.Em outros casos o mais adequado seria uma variavel.

for(int i = 0; i < 4; i++) {   
     for(int j = 0; j < matriz[i].length; j=j+4) {  
//Aqui você tera que inserir os dados
matriz[ i ][ j ] = Nome;
matriz[ i ][ j +1] = cargo;
matriz[ i ][ j +2] = salário anterior;
matriz[ i ][ j +3] = salário atual
        }   
}

Para mostrar a saída você usa um for( ), pode ser igual ao de cima para percorrer a matriz e mostrar na tela

System.out.println(" Dados dos Funcionarios \n");
for(int i = 0; i < 4; i++) {   
     for(int j = 0; j < matriz[i].length; j=j+4) {  
         System.out.print("Nome: "+matriz[ i ][ j ]+" Cargo: "+matriz[ i ][ j+1 ]+" Sal.Anterio: "+matriz[ i ][ j +2]+" Sal.Atual: "+matriz[ i ][ j+3 ]+" \n"); ou println(" ");
    }
}

Espero ter ajudado


#3

Bom, ACHO que peguei a ideia da coisa. Mas o problema é: Como colocar variaveis diferentes dentro da matriz int?

Existe como fazer uma matriz "mista" que aceite qualquer tipo de dado ou tenho que transformar os dados pra int antes de colocar na matriz?

Acredito que tenha um monte de erros ai no meio alem das variaveis toscas, mas a ideia geral é essa mesma?

Pelo que entendi de executar o programa, o unico erro é tentar colocar variaveis mistas dentro de uma matriz tipo int.

import java.io.*;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Calcula_Funcionario_II
{
        public static void main(String args[]) 
        {
            BufferedReader entrada; 
            entrada = new BufferedReader(new InputStreamReader(System.in));
            String NomeFunc;
            float Salario = 0;
            int TempoTrabalho;
            int AnoAdmiss = 0;
            int Cargo = 0;
            Date Agora = new Date();
            float AccSalario = 0;
            double AccGer = 0;
            double AccTec = 0;
            double AccEng = 0;
            double AccOut = 0;
            double Total = 0;
            String resp = "S";
            int TotInf = 0;
            int NumAnos = 0;
            int AnoAtual= 0;
            double NovoSalario = 0;
            int Matriz [][] = new int [4][TotInf];
            try
            {
                while (resp.equals("S") || resp.equals("s"))
                {
                    for(int i = 0; i < 4; i++) 
                 	{   
                    NomeFunc = "";
                    Salario = 0;
                    TempoTrabalho = 0;
                    AnoAdmiss = 0;
                    NovoSalario = 0;
                    System.out.println("Informe o nome do funcionário ...");
                    NomeFunc = entrada.readLine();
                    System.out.println("Informe o salário do funcionário ...");
                    Salario = Integer.parseInt(entrada.readLine());
                    AccSalario = AccSalario + Salario;
                    SimpleDateFormat formato = new SimpleDateFormat("yyyy");
                    System.out.println("Ano atual " + formato.format(Agora)); 
                    AnoAtual = Integer.parseInt(formato.format(Agora));
                    System.out.println("Informe o ano de admissão do funcionário ...");
                    AnoAdmiss = Integer.parseInt(entrada.readLine());
                    NumAnos = AnoAtual - AnoAdmiss;
                    if (NumAnos > 0)
                    {
                    System.out.println("Informe o cargo do funcionário.\nUse 1 Para Gerente, 2 Para Engenheiro, 3 Para Técnico e 4 Para outros");
                    Cargo = Integer.parseInt(entrada.readLine());
                    if (Cargo == 4) 
                    {
                        NovoSalario = Salario + Salario * 0.07;
                        AccOut = AccOut + NovoSalario;    
                    }
                    if (Cargo == 1)
                    {
                            if (NumAnos >= 5)
                            {
                                NovoSalario = Salario + Salario * 0.1;
                            }
                            if (NumAnos >= 3 && NumAnos < 5)
                            {
                                NovoSalario = Salario + Salario * 0.09;
                            }
                            else
                            {
                                NovoSalario = Salario + Salario * 0.08;
                            }
                            AccGer = AccGer + NovoSalario;
                    }
                    if (Cargo == 2)
                    {
                            if (NumAnos >= 5)
                            {
                                NovoSalario = Salario + Salario * 0.11;
                            }
                            if (NumAnos >= 3 && NumAnos < 5)
                            {
                                NovoSalario = Salario + Salario * 0.1;
                            }
                            else
                            {
                                NovoSalario = Salario + Salario * 0.09;
                            }
								AccEng = AccEng + NovoSalario;
                        }       
                    if (Cargo == 3)
                    {
                            if (NumAnos >= 5)
                            {
                                NovoSalario = Salario + Salario * 0.12;
                            }
                            if (NumAnos >= 3 && NumAnos < 5)
                            {
                                NovoSalario = Salario + Salario * 0.11;
                            }
                            else
                            {
                                NovoSalario = Salario + Salario * 0.1;
                            }
                            	AccTec = AccTec + NovoSalario;
                    }
                    System.out.println("O funcionário " + NomeFunc + " Receberá R$ " + NovoSalario + "!");
                    System.out.println("Por seus serviços prestados nos últimos " + NumAnos + " anos nesta empresa.");
                    TotInf = TotInf+ 1;
                    Total = AccGer + AccTec + AccEng + AccOut;
     			     for(int j = 0; j < Matriz[i].length; j=j+4)
     				{  
					Matriz[ i ][ j ] = NomeFunc;
					Matriz[ i ][ j ++] = Cargo;
					Matriz[ i ][ j ++] = Salario;
					Matriz[ i ][ j ++] = NovoSalario;
		        	}   
				}
                    System.out.println("Deseja informar outro funcionário ?");
                    resp=entrada.readLine();
                    if (resp.equals("N") || resp.equals("n"))
                    {
                        System.out.println("Foram informados " + TotInf + " Funcionarios. Com um total de R$"+ AccSalario +".");
                        System.out.println("Os Funcionarios, agora recebem um total de R$:" + Total +".");
                        System.out.println("A empresa vai ter um aumento de: " + (Total - AccSalario) + ". Nas suas folhas de pagamento.");
                        System.out.println(" Dados dos Funcionarios \n");
							for(int i = 0; i < 4; i++) 
								{   
     								for(int j = 0; j < Matriz[i].length; j=j+4) 
     									{  
         									System.out.print("Nome: "+Matriz[ i ][ j ]+" Cargo: "+Matriz[ i ][ j+1 ]+" Sal.Anterio: "+Matriz[ i ][ j +2]+" Sal.Atual: "+Matriz[ i ][ j+3 ]+" \n");
    									}
								}
                        System.out.println("Obrigado por utilizar nosso sistema!");
                    }
                    }
                    else
                    {
                    	System.out.println("O ano de admissão é invalido. Reiniciando o Programa.");
                    }
                }
            }
            catch (Exception e)
            {
                System.out.println("Ocorreu um erro durante a leitura");
            }
        }
}

PS: Ainda não está "terminado", tem algumas outras coisas que pretendo fazer, mas isso é "enfeite" meu pra fazer um programa com "minha cara".
As variaveis diferentes pra salarios servem pra (quando a parte da Matriz rodar direito) mostrar quanto cada cargo teve de aumento.


#4

vc pode fazer a matriz de Object[]:

Object[][] matriz = new Object[10][3];
matriz[0][0] = new String("teste");
matriz[0][1] = new Integer(1);
matriz[0][2] = new Float(50f);

System.out.println(matriz[0][0]);
System.out.println(matriz[0][1]);
System.out.println(matriz[0][2]);

ou vc tambem pode montar um HashMap:

Map> tabela = new HashMap>();
Map campos = new HashMap();
campos.put("nome", new String("tiozao"));
campos.put("idade", new Integer(10));
tabela.put(1, (HashMap) campos);

HashMap camposRecuperado = tabela.get(1);
System.out.println(camposRecuperado.get("nome"));
System.out.println(camposRecuperado.get("idade"));

ou melhor ainda vc monta um modelo q define as caracteristicas do funcionario e cria uma classe com ela um Bean, depois é só instanciar essa classe e popular com os valores que vc calculou


#5

- Muitissimo obrigado a todos, agora o programa rodou lindamente.

Usei a Matriz de Object e funcionou que é uma maravilha.

Mais uma vez, obrigado.


#6