Algorytm zamieniajacy reszte na monety

0

Witam.
Napisałem taki oto kod który zamienia jakąś reszta (np w sklepie, automacie) na monety/banknoty.

package pl.danek.reszta;

import java.util.ArrayList;
import java.util.Scanner;

public class Reszta {

	public static void main(String[] args) {//wiem metoda main jest brzydka ale to tylko do testów
		Reszta r = new Reszta();
		Scanner s = new Scanner(System.in);
		System.out.println("Podaj reszte do wydania");
		double cena=Double.parseDouble(s.nextLine());
		ArrayList<Integer>test = r.reszta((int)(cena*100));
		r.print(test);
	}

	//formatuje i wyswietla liste reszty
	public void print(ArrayList<Integer> reszta){
		System.out.println("Reszta:");
		for (Integer integer : reszta) {
			if (integer>99) {
				System.out.println(integer/100+" zł");
			}else {
				System.out.println(integer+" gr");
			}
		}
	}
	
	//lista mozliwych nominałów do wydania
	public final int [] nomimaly = { //w groszach
			20000, //200 zl
			10000, //100 zl
			5000, // i tak dalej
			2000,
			1000,
			500,
			200,
			100,
			50,
			20,
			10,
			5,
			2,
			1
	};

	public ArrayList<Integer> reszta(int kwota){
		ArrayList<Integer> reszta = new ArrayList<>();


		int pom=0; 
		do {
			
			if (kwota==0||pom>nomimaly.length) {
				break;
			}

			if (kwota>=nomimaly[pom]) {
				reszta.add(nomimaly[pom]);
				kwota-=nomimaly[pom];
			}else {
				pom++;
			}
			
			
		} while (true);		

		return reszta;
	}


}

I mam pytanie czy jest to wmiare poprawne wykonane? (chodzi mi o dobre nawyki programistyczne)

2

A czemu nie zrobić po ludzku:

public ArrayList<Integer> reszta(int kwota)
  {
   ArrayList<Integer> ret=new ArrayList<>();
   for(int pos=0;kwota>0;++pos) // nie ma co sprawdzać czy nie przekroczono nomimaly[pos] dopóki ostatnia wartość jest jedynką
     {
      int value=nomimaly[pos],count=kwota/value;
      kwota-=count*value;
      while(count-->0) ret.add(value);
     }
   return ret;
  }

?

1 użytkowników online, w tym zalogowanych: 0, gości: 1