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;
}
}
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.