Como gerar uma lista com numero de parcelas e o valor total

Bom dia

Sou iniciante em java e estou tentando fazer um programa que tenho uma interface com metodo geraParcelas onde tem o numero de parcelas e o valor total e nao estou conseguindo gerar esta lista com o metodo da interface, como resolvo ?

A interface esta assim.

interface GNotaFiscal {
	List<Double> geraParcelas(int nrParcelas, double valorTotal);
}

Criei a classe NotaFiscal mas estou em duvida como vou gerar a lista com o numero de parcelas e o valor total

A partir do momento que vc define uma interface, vc deve criar a implementação dessa interface, que é quem realmente irá processar a lógica. Vc criou a implementação dessa interface?

Ola Lucas

Tentei criar uma mas nao deu certo, estou bem confuso de como implementar.

Uma classe que implementa essa interface seria assim:

public class NotaFiscalPadrao implements GNotaFiscal {
    public List<Double> geraParcelas(int nrParcelas, double valorTotal) {
        // implemente a lógica aqui
    }
}

Como eu gero a lista com o numero de parcelas e o valor ?

Imagino que seria o valor total dividido pela quantidade de parcelas. Se vc faz uma compra de 100 reais parcelada no cartão em 5 vezes. Qto ficaria cada parcela?

Ficaria 5 de 20 reais, mas como eu imprimiria isso em uma list ?

Se forem parcelas com valores sempre iguais:

public class Main {

	public static void main(String[] args) {
		List<Double> parcelas = calcularParcelas(5, 100.0);
		
		for (int i = 0; i < parcelas.size(); i++) {
			System.out.printf("Parcela %d: %.2f %n", (i + 1), parcelas.get(i));
		}
	}
	
	private static List<Double> calcularParcelas(int numeroParcelas, Double valorTotal) {
		double valorParcela = valorTotal / numeroParcelas;
		List<Double> parcelas = new ArrayList<>();
		
		for (int i = 0; i < numeroParcelas; i++) {
			parcelas.add(valorParcela);
		}
		
		return parcelas;
	}
}

Lembrando que dessa forma, pode ter problemas de precisão referente ao valor total. Por exemplo, se for 100 reais em 3 vezes, cada parcela será de 33.33 que, somando, dará 99.99, ou seja, 1 centavo ficará “perdido”. Tu pode melhorar a lógica para não acontecer esse tipo de coisa.

Para resolver da melhor forma, use BigDecimal em vez de double.

Ola

Baseado no exemplo que me enviou, fiz a classe NotaFiscal dessa maneira:

import java.util.ArrayList;
import java.util.List;

public class NotaFiscal implements NotaFiscal {

@Override
public List<Double> geraParcelas(int nrParcelas, double valorTotal) {
	
	List<Double> calcularParcelas(int nrParcelas, Double valorTotal) {
		double valorParcela = valorTotal / nrParcelas;
		List<Double> parcelas = new ArrayList<>();
		
		for (int i = 0; i < nrParcelas; i++) {
			parcelas.add(valorParcela);
		}
		
		return parcelas;
	}
}

E o main ficou assim, mas apresentou erro:

import java.util.ArrayList;
import java.util.List;

public class CalcularParcelas {

public static void main(String[] args) {
	
	List<NotaFiscal> list=new ArrayList<>();
			
	NotaFiscal notafiscal=new NotaFiscal();
	list.add(notafiscal);
	
	notafiscal= NotaFiscal.calcularParcelas(5,100.0);
}

}

Seu main está errado msm. E a classe NotaFiscal está esquisito, pq ela está implementando ela mesmo (??).

Em consideração da interface que vc postou, a classe NotaFiscal deveria ser assim:

public class NotaFiscal implements GNotaFiscal {
    @Override
    public List<Double> geraParcelas(int nrParcelas, double valorTotal) {
        // código
    }
}

E a classe CalcularParcelas ficaria assim:

public class CalcularParcelas {
  
  public static void main(String[] args) {
    GNotaFiscal notaFiscal = new NotaFiscal();
    List<Double> parcelas = notaFiscal.calcularParcelas(5, 100.0);

    for (int i = 0; i < parcelas.size(); i++) {
      System.out.println("Parcela " + (i+1) + ": " + parcelas.get(i));
    }
  }
}

Ola
Estou na duvida na classe NotaFiscal, alterei e deu erro, ficou assim:

import java.util.ArrayList;
import java.util.List;

public class NotaFiscal implements INotaFiscal {

@Override
public List<Double> geraParcelas(int nrParcelas, double valorTotal) {
	
	private static List<Double> calcularParcelas(int numeroParcelas, Double valorTotal) {
		int nrParcelas;
		double valorParcela = valorTotal / nrParcelas;
		List<Double> parcelas = new ArrayList<>();
		
		for (int i = 0; i < numeroParcelas; i++) {
			parcelas.add(valorParcela);
		}
		
		return parcelas;
	}
}
  • Esse nrParcelas está sobrando. Use o numeroParcelas que chega como parâmetro e remova esse nrParcelas.

  • Remova o static do método também.

  • Deixe o método public

Ola
Desculpe a demora para responder, mas tive problemas com a internet por aqui.

Fiz as alteraçoes mas ainda aparece erro na linha do metodo geraParcelas

import java.util.ArrayList;
import java.util.List;

public class NotaFiscal implements GNotaFiscal {

	@Override
	public List<Double> geraParcelas(int nrParcelas, double valorTotal){
	
		public List<Double> calcularParcelas(int numeroParcelas, Double valorTotal) {
			
			double valorParcela = valorTotal / numeroParcelas;
			List<Double> parcelas = new ArrayList<>();
			
			for (int i = 0; i < numeroParcelas; i++) {
				parcelas.add(valorParcela);
			}
		
			return parcelas;
	}
}

Ah rapaz, tu criou um método dentro de outro. Deixa soh assim:

import java.util.ArrayList;
import java.util.List;

public class NotaFiscal implements GNotaFiscal {
  
  @Override
  public List<Double> geraParcelas(int numeroParcelas, double valorTotal){
    double valorParcela = valorTotal / numeroParcelas;
    List<Double> parcelas = new ArrayList<>();
    
    for (int i = 0; i < numeroParcelas; i++) {
      parcelas.add(valorParcela);
		}
		
    return parcelas;
	}
}

Olá
Desculpe a demora para responder, a sua dica deu certo e me ajudou muito nos estudos obrigado pela ajuda.