Auxilio no algoritmo - iniciante com chefe que não entende que sou iniciante! [resolvido]

16 respostas
Solonbra

Olá

Fui contratado para desenvolver um programa na empresa X (por ética não posso falar), quando me contrataram disseram que tinha uns 2 caras que sabiam e eu iria auxiliar (aprender e servir de digitador de código), mas cheguei e estou SOZINHO com a tarefa de desenvolver um programa. Como não tenho experiencia preciso de uma força, não achei na net nem nas apostilas da facul (1º semestre).

tenho uma entrada em formato data que vou usar sem as barras ex: 10062009
preciso transformar elas em um vetor [8] ou sub-dividir em dia mes e ano.

consegui fazer um código que divide mas fica em char os números e não consigo transforma-los de volta a int para dar o formato acima.

:arrow:

public static void main (String arg [ ] ) {

String v = “123456”;
for (int i=0; i < v.length(); i++) {
	 	 System.out.println("valor de i  " + i + " é " + v.charAt(i));
	}

com a variavel em dia, mês e ano vou fazer uma matriz de parcelas, ou seja, se entrar com 5 parcelas tenho uma matriz [parcela][3] (coluna é parcela, mês, ano).
dai só fazer um for progressivo para contagem dos meses e anos conforme parcelas.

  1. Como transformo string em int ou int em double
  2. Tem outra forma de achar a casa numérica sem ser a que postei?
  3. Tem outra forma mais fácil de fazer isso sem seguir os passos acima?

Estou com um pouco de pressa pois não tenho experiencia em programação, sei um pouco de html e preciso do dinheiro deste estágio para a facul!

Valeu!

16 Respostas

xandevieira

se vc receber a data sempre neste formato, utilize substring;
ex. String date = "10062009 "; System.out.println("dia: "+Integer.parseInt(date.substring(0,2).trim())); System.out.println("mes: "+Integer.parseInt(date.substring(2,4).trim())); System.out.println("mes: "+Integer.parseInt(date.substring(4, date.length()).trim()));

Andre_Fonseca
Solonbra:
Olá

Fui contratado para desenvolver um programa na empresa X (por ética não posso falar), quando me contrataram disseram que tinha uns 2 caras que sabiam e eu iria auxiliar (aprender e servir de digitador de código), mas cheguei e estou SOZINHO com a tarefa de desenvolver um programa. Como não tenho experiencia preciso de uma força, não achei na net nem nas apostilas da facul (1º semestre).

tenho uma entrada em formato data que vou usar sem as barras ex: 10062009
preciso transformar elas em um vetor [8] ou sub-dividir em dia mes e ano.

consegui fazer um código que divide mas fica em char os números e não consigo transforma-los de volta a int para dar o formato acima.
:arrow:
public static void main (String arg [ ] ) {
String v = "123456";

for (int i=0; i < v.length(); i++) {
System.out.println("valor de i " + i + " é " + v.charAt(i));
}

com a variavel em dia, mês e ano vou fazer uma matriz de parcelas, ou seja, se entrar com 5 parcelas tenho uma matriz [parcela][3] (coluna é parcela, mês, ano).
dai só fazer um for progressivo para contagem dos meses e anos conforme parcelas.

1) Como transformo string em int ou int em double
2) Tem outra forma de achar a casa numérica sem ser a que postei?
3) Tem outra forma mais fácil de fazer isso sem seguir os passos acima?

Estou com um pouco de pressa pois não tenho experiencia em programação, sei um pouco de html e preciso do dinheiro deste estágio para a facul!

Valeu!

Oi

voce pode usar substring, o que seria casa numérica??
Coloca o seu código nas tags \[code\]

String s = "10";
// transformar String em int
int i = Integer.valueOf(s);
		
// transformar int em double
double d = (double) i;

s = "10062009";
		
String dia = s.substring(0,2);
String mes = s.substring(2,4);
String ano = s.substring(4);
		
System.out.println("dia/mes/ano ==> "+(dia+"/"+mes+"/"+ano));
georgesq

dê uma olhada em GregorianCalendar, esse cara vai resolver seus problemas, junto com SimpleDateFormat

[s]

Solonbra
André Fonseca:

Oi

voce pode usar substring, o que seria casa numérica??
Coloca o seu código nas tags \[code\]

String s = "10";
// transformar String em int
int i = Integer.valueOf(s);
		
// transformar int em double
double d = (double) i;

s = "10062009";
		
String dia = s.substring(0,2);
String mes = s.substring(2,4);
String ano = s.substring(4);
		
System.out.println("dia/mes/ano ==> "+(dia+"/"+mes+"/"+ano));

Já deu uma força

casa numérica é a casa de ordem (não lembro de outro nome)
tipo 10/06/2009
1 = 8ª casa
6 = 5ª casa

vou juntar as string em mês e ano transformando em int para somar!
multiplica a segunda por 10 e soma com a primeira
ex: 0 e 6 fica
(0*10) +6 = 6

uma conta para cada grupo (mês e ano).

com este número ordenado em uma matriz vou fazer a contagem do mês e somar anos caso passe de 12 o valor "mês".

oddy.silva

Amigo, já tive o mesmo problema. Acho que o código abaixo pode te ajudar.

//A Data que será usada no formato dia/Mês/ano
            String sdata = "20102008";
            SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");

            Date data = null;
            data = sdf.parse(sdata);

O pedaço de código faz o seguinte:

sdata é a data que eu informo, como exemplo.
SimpleDateFormat é uma classe que me ajuda a formatar a data do jeito que quero.
No exemplo acima eu uso o nosso padrão de calendário, mas você pode ter o americano,
que seria (“yyyyMMdd”).

data é minha data já convertida. Abraço!

Solonbra

Pessoal valeu muito a força!!!

Sou iniciante mesmo e não entendi o calendário gregoriano indicado, não tive aula sobre objetos e estou com dificuldades com modulos pois a aulas foram muito rápidas!

Consegui convencer o chefe a separar na entrada dos dados o dia, mês e ano, desta forma fico com 3 variáveis do tipo int, mas fácil para fazr uma matriz!

alves.Felipe

mas vc quer trabalhar com um array??

e se vc fizer assim?

String data ="10/06/09";

//vai te retornar o array de String...
String [] dataDividida = data.split("/");

se precisar trabalhar com int , vc faz :

int dia = Integer.parseInt(dataDividida[0]);
Solonbra

alves.Felipe:
mas vc quer trabalhar com um array??

e se vc fizer assim?

String data ="10/06/09";

//vai te retornar o array de String...
String [] dataDividida = data.split("/");

se precisar trabalhar com int , vc faz :

int dia = Integer.parseInt(dataDividida[0]);

Felipe, infelizmente não consegui usar este código também, não consigo pegar o mês ou o ano nele para fazer uma contagem.

o que estou usando é

import javax.swing.*;
public class criamatrizparcela2 { //início class.
	public static void main (String arg [ ] ) { //início static void main.
	
	//declarando as variáveis.
	int parcela, mes, ano, parcel, coluna;
	int i, j;
		
	//declarações necessárias
	parcel = 1;
	coluna = 0;
	
	//provisório para teste rápido
	parcela = 15;
	mes = 11;
	ano = 2009;	
		
	/*entradas necessárias via HTML/PHP.
	parcela
	mes
	ano
	*/
	
	//declaração da matriz.
	int matriz_parcelas[ ][ ] = new int [parcela][3];
			
	//processamento de dados para completar a matriz.
	for ( i = 0; i < parcela; i++ ){ //início for 1;
		for ( j = 0; j < 3; j++ ){ //início for 2;
			if ( j <= 2 ){ //if 1
				coluna = parcel;
				if ( j <= 1 ){ //if 2
					if (j  == 1 ) { //if 3
						mes = mes + 1;
						coluna = mes;
						if ( mes > 12 ){ // if 4
						mes = 1;
						coluna  = mes;	
						} //fim if 4
					} //fim if 3
				} //fim if 2
				else { //else 1
					parcel = parcel + 1;
					coluna = ano;
				}// fim else 1
			} //fim if 1
		if (coluna == mes && mes == 12){ // início if para ano.
				ano = ano + 1;
		} //fim if para ano.

		matriz_parcelas[i][j] = coluna;		
		} //fim for 2.
	} //fim for 1.

	//teste da matriz para averiguar dados, apagar quando confirmado 100% dos resultados.
	for ( i = 0; i < parcela; i++ ){ //início for 3;
		for ( j = 0; j < 3; j++ ){ //início for 4;
		System.out.println("matriz_parcelas[" +i+ "][" +j+ "] = " + matriz_parcelas[i][j]);
		} // início for 3.
	} // inicio for 4.
		
	} //fim static void main.
} //fim class

Neste código o problema é se o mês inicial é 12, a primeira parcela seria no mês 1 do ano seguinte mas cai no mesmo ano.

Estou tentando refazer mas não consigo melhor resultado do que este!
Se for o mês 11 como início ele faz certinho a relação parcela / mês / ano!

thiago.correa

Cara, se você quer manipular datas, o melhor a fazer é utilzar uma classe apropriada para isso, e essa classe seria Calendar vou te mostar um exemplo de "simulador de parcelas" a partir da data da compra e o número de parcelas

Outra coisa, tudo bem que você esteja começando, mas é importante que você dê uma lida no Java Code Convetions, isso é cobrado em muitas empresas e o teu cógio em partes não está de acordo com essa convenção, bom fica aí meu concelho

Segue o código

int numeroDeParcelas = 15; //numero de parcelas em que a compra foi feita
        String inicioCompra = "01112008"; //data da compra no formato string
        
        SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy"); //formatador de datas
        Date dataCompra = sdf.parse(inicioCompra); //pega o objeto data a partir do formato
        
        Calendar c = Calendar.getInstance(); //classe utilizada para manipular datas
        c.setTime(dataCompra);
        
        
        for (int parcelaNumero = 0; parcelaNumero < numeroDeParcelas; parcelaNumero++) {
            c.add(Calendar.MONTH, 1); // acrescenta 1 ao mês para saber as datas do pagamento
            System.out.println("Data pagamentos " + c.getTime());
        }
alves.Felipe

cara eu só pessei isso pra vc pq disse que queria trabalhar com array... mas para trabalhar com datas não é a melhor opção não..
o thiago mandou um exemplo...

mas oq eu mandei funciona sim:
String data ="10/06/09";   
		  
		//vai te retornar o array de String...   
		String [] dataDividida = data.split("/");  

		for(int a=0;a<dataDividida.length;a++)
		{
			System.out.println(dataDividida[a]);
		}
Solonbra
alves.Felipe:
cara eu só pessei isso pra vc pq disse que queria trabalhar com array... mas para trabalhar com datas não é a melhor opção não.. o thiago mandou um exemplo... mas oq eu mandei funciona sim:
String data ="10/06/09";   
		  
		//vai te retornar o array de String...   
		String [] dataDividida = data.split("/");  

		for(int a=0;a<dataDividida.length;a++)
		{
			System.out.println(dataDividida[a]);
		}

O problema é que estou limitado ao que já sei!
estou fazendo o que posso com o pouco que aprendemos nas aulas!!!

Hoje vou pgar um livro de Java apra me auxiliar, meu primeiro contato com programação :oops:

T

Se você sempre se limitar ao pouquíssimo que aprende nas aulas, nunca será ninguém na vida. Nunca seja uma pessoa limitada!

Pegue o tal livro e estude-o até que você saiba mais que seu professor (o que normalmente não é difícil, não?). Faça um monte de exercícios; e surpreenda seu chefe, fazendo a tal tarefa que ele pediu.

Se eu fosse seu chefe eu não daria a mínima para o fato de que você é iniciante - na verdade iria ser até mais chato, e não iria aceitar essa sua solução de ler um número de cada vez.

Boa sorte!

thiago.correa

thingol:
Solonbra:

O problema é que estou limitado ao que já sei!
estou fazendo o que posso com o pouco que aprendemos nas aulas!!!

Se você sempre se limitar ao pouquíssimo que aprende nas aulas, nunca será ninguém na vida. Nunca seja uma pessoa limitada!

Pegue o tal livro e estude-o até que você saiba mais que seu professor (o que normalmente não é difícil, não?). Faça um monte de exercícios; e surpreenda seu chefe, fazendo a tal tarefa que ele pediu.

Se eu fosse seu chefe eu não daria a mínima para o fato de que você é iniciante - na verdade iria ser até mais chato, e não iria aceitar essa sua solução de ler um número de cada vez.

Boa sorte!

Concordo com o thingol, no guj mesmo tem uma série de recomendações de livros para todos os níveis (intermediário, iniciante etc…) o mais conhecido é o Java Como Programar (se eu não me engano está na 6ª edição) outro recomendado é o Java use a cabeça, e por aí vai, tem o tutorial no site da Sun que ajuda bastante, tem a API que contém os métodos, em alguns casos, contém exemplos do seu uso! O aprendizado é árduo mas depois você vai ver que vai mais ao natural!!!

Boa jornada!!!

Solonbra

Valeu a força.

Consegui resolver a questão do algoritmo, agora ja faz a contagem do tempo da forma correta.
Meu problema é ter que produzir e aprender ao mesmo tempo, estou fazendo em PHP e MySQL a parte web pois não tenho condições tecnicas de fazer no PC, tenho só mais 1 semana para terminar um software ou um sistema de cadastro, impressão de boleto e contrato de prestação de serviços.

Sei o básico de PHP, MySQL e Java…
Lí o livro de HTML da mesma editora do Java, Use a Cabeça é muito bom mas não estou achando-o para vender, o preço consegui em site mas estava esgotado… e como estou meio duro preciso fazer algo para poder pagar por isso este emprego e tão importante, sem ele nao tenho dinheiro para comprar livros e só anet para tirar dúvidas mesmo :frowning:

Ainda tenho alguns desafios como pegar as informações no PHP processar em Java e inserir no MySQL para poder consultar depois.

Vou dar uma corrida nos sebos´no centro com a lista de livros do forum, quem sabe consigo algum :wink:
vou ver se na segunda ele me libera, meu horário lá é das 8 as 18 de segunda a sabado, perdi a semana para qualquer coisa :?

Valeu a força e obrigado pelas dicas vou grava-las no pc em casa para esduda-las depois!!!

abraços!

Solonbra

Só para fechar o tópico…
Acho que é educado indicar que foi solucionado e colocar a solução, assim quem entrar sabe como se deu o desfecho do caso!

segue o código que consegui usar para resolver a questão da contagem parcela, mês e ano.

import javax.swing.*;   
public class progpgparc { //início class.   
    public static void main (String arg [ ] ) { //início static void main.   
       
    //declarando as variáveis.   
    int parcela, parcel, coluna;   
    int i, j;   
    int dia, mes, ano;
    
                   
    //declarações necessárias   
    parcel = 1;   
    coluna = 0;   
       
    //provisório para teste rápido   
    parcela = modQparcela ();   // Modulo para entrar com parcela.
    mes = 1; // configurar outra entrada conforme necessidade.
    ano = 2009; // configurar outra entrada conforme necessidade.
        
    //declaração da matriz.   
    int matriz_parcelas[ ][ ] = new int [parcela][3];   
               
    //processamento de dados para completar a matriz.   
    for ( i = 0; i < parcela; i++ ){ //início for 1;   
        for ( j = 0; j < 3; j++ ){ //início for 2;   
            if ( j <= 2 ){ //if 1   
                coluna = parcel;   
                if ( j <= 1 ){ //if 2   
                    if (j  == 1 ) { //if 3   
                        mes = mes + 1; 
                        if ( mes > 12 ){ // if 4   
                        mes = 1;
                        ano = ano + 1;   
                        } //fim if 4   
                        coluna  = mes;  
                    } //fim if 3   
                } //fim if 2   
                else { //else 1   
                    parcel = parcel + 1;   
                    coluna = ano;   
                }// fim else 1   
            } //fim if 1   
            matriz_parcelas[i][j] = coluna;       
        } //fim for 2.   
    } //fim for 1.   
  
    //teste da matriz para averiguar dados, apagar quando confirmado 100% dos resultados.   
    for ( i = 0; i < parcela; i++ ){ //início for 3;   
        for ( j = 0; j < 3; j++ ){ //início for 4;   
        System.out.println("matriz_parcelas[" +i+ "][" +j+ "] = " + matriz_parcelas[i][j]);   
        } // início for 3.   
    } // inicio for 4.   
    } //fim static void main.   

	public static int modQparcela () { // início Modulo de adição da quantidade de parcelas.
		int ret;
		
		//aqui deve ser incerido a quantidade de parcelas
		ret = Integer.parseInt (JOptionPane.showInputDialog ("Quantas parcelas serão?"));
		
		return ret;
	} // fim Modulo de adição da quantidade de parcelas.

Agradeço o pessoal que deu as dicas acima, estão anotadas e vou estudar como usar elas ainda!
[ ]s

O
Seu código me deu uma boa diversão, já que gosto de refactoring. Estou suponde que você vai entrar com o número de parcelas e data da primeira parcela em formato String "ddMMyyyy".
public class ParcelasDeCompra {
	private int parcelas[][];
	private String data;

	public ParcelasDeCompra(int numeroDeParcelas, String data) {
		this.data = data;
		parcelas = new int[numeroDeParcelas][];
		calcularParcelas();
	}

	private void calcularParcelas() {
		int mes = Integer.valueOf(data.substring(2, 4));
		int ano = Integer.valueOf(data.substring(4));
		int parcela = 1;
		for (int i = 0; i < parcelas.length; i++) {
			if (mes == 13) {
				mes = 1;
				ano++;
			}
			parcelas[i] = new int[] { parcela++, mes++, ano };
		}
	}

	public void imprimirParcelas() {
		for (int[] parc : parcelas) {
			System.out.printf("Parcela %02d: %02d/%d\n", parc[0], parc[1], parc[2]);
		}
	}

	public static void main(String arg[]) {
		ParcelasDeCompra pgp = new ParcelasDeCompra(9, "12062009");
		pgp.imprimirParcelas();
	}
}
Ou, não programando orientado a Strings:
public class ParcelasDeCompra {
	private int totalParcelas;
	private Calendar primeiraParcela;
	
	public ParcelasDeCompra(int totalParcelas, String data) throws ParseException {
		this.totalParcelas = totalParcelas;
		primeiraParcela = Calendar.getInstance();
		primeiraParcela.setTime(new SimpleDateFormat("ddMMyyyy").parse(data));
	}
	
	public Calendar dataDaParcela(int parcela) {
		Calendar cal = Calendar.getInstance();
		cal.setTimeInMillis(primeiraParcela.getTimeInMillis());
		cal.add(Calendar.MONTH, parcela);
		return cal;
	}
	
	public void imprimirParcelas() {
		System.out.println("Parcela   Data");
		for (int i = 0; i < totalParcelas; i++) {
			System.out.printf("%02d        %2$tm/%2$tY\n", i+1, dataDaParcela(i));
		}
	}
	
	public static void main(String arg[]) throws ParseException {
		ParcelasDeCompra pgp = new ParcelasDeCompra(8, "12082009");
		pgp.imprimirParcelas();
	}
}
Criado 9 de junho de 2009
Ultima resposta 12 de jun. de 2009
Respostas 16
Participantes 9