Tablica dwuwymiarowa

0

Cześć, robię kalkulator oszczędzania, na końcu po całym podsumowaniu chciałabym wstawić tablicę dwuwymiarową, która będzie mi w pętli obliczała jaką kwotę już oszczędziliśmy po roku, dwóch itd. Niestety nie do końca wiem jak to zrobić, z tego kodu co napisałam wywala mi błąd, że nie może znalezć symbolu... Na wszelki wypadek wstawiam cały kod(tak wiem że nie jest idealny), ale chodzi mi o pomoc w samej końcówce.

 import java.util.*;

 class excel
 {
 public static void main ( String[] args)	
 {
 System.out.println("Witaj w programie kalkulator systematycznego oszczędzania.");
 System.out.println(" ");
 System.out.println(" ");

double wkwota = 0;
double wynik=0;
int lbmiesiecy;
double procenty;
double odsetki=0;
double podatek=0;

	Scanner podaj = new Scanner(System.in);
	boolean niepoprawne = true;
do {
try {
		System.out.println("Podaj kwotę miesięcznej wpłaty (zł) :");
		double skladka = podaj.nextDouble();
		if (skladka<=0) throw new Exception();

		System.out.println("Podaj czas oszczędzania (lata) :");
		int okres = podaj.nextInt();
		if (okres<=0) throw new Exception();
		
		System.out.println("Podaj oprocentowanie roczne (%): ");
		double stopa = podaj.nextDouble();
		if (stopa>100) throw new IllegalArgumentException();
		if (stopa<=0) throw new Exception();
	
		System.out.println("Czy uwzględnić podatek? Wpisz 'tak' lub 'nie'");
		String pod = podaj.next();

	switch(pod) {
            case "tak":
			lbmiesiecy=okres*12;
			procenty=(stopa/100/12);
			wkwota = skladka*lbmiesiecy;
			wynik = skladka*(0.81*(Math.pow(1+procenty,lbmiesiecy)-1)/procenty + (0.19*lbmiesiecy));
			odsetki= wynik-wkwota;
			podatek= (skladka*((Math.pow(1+procenty,lbmiesiecy)-1)/procenty)) - wynik;
                break;
            case "nie":
              	  lbmiesiecy=okres*12;
			procenty=(stopa/100/12);
			wkwota = skladka*lbmiesiecy;
            		wynik = skladka*((Math.pow(1+procenty,lbmiesiecy)-1)/procenty);
			odsetki=wynik-wkwota;
                break;
            default:
                System.out.println("Wpisz: 'tak' lub 'nie'");
		break;
         }
	
System.out.println();
System.out.printf("Wpłacono: %.2f zł \n", wkwota);
System.out.printf("Suma odsetek: %.2f zł \n", odsetki);
System.out.printf("Podatek: %.2f zł \n", podatek);
System.out.printf("Całkowita zaoszczędzona kwota po %d latach: %.2f zł \n", okres, wynik);

niepoprawne = false;
	} catch (InputMismatchException e) {
		System.out.println();
		System.err.println("Nie podałeś liczby.");
		podaj.nextLine();
		System.out.println("Wprowadz dane ponownie.");
		System.out.println();
	} catch (IllegalArgumentException ei) {
		System.out.println();
		System.err.println("Podałeś za dużą liczbę.");
		podaj.nextLine();
		System.out.println("Wprowadz dane ponownie.");
		System.out.println();
	 } catch (Exception nve) {
		System.out.println();
		System.err.println("Podałeś liczbę ujemną.");
		podaj.nextLine();
		System.out.println("Wprowadz dane ponownie.");
		System.out.println();
	}
	} while (niepoprawne);
	podaj.close();

**System.out.println();
System.out.println("Harmonogram oszczędności");
System.out.println("Rok  :  Wartość");
int i;
double[] tablica = new double[okres];
	for (i=1;i<=okres; i++) {
	tablica[i] = skladka*((Math.pow(1+procenty,i*12)-1)/procenty);
}	for (i=1; i<=okres; i++) {
	System.out.println("Rok   :  Wartość" + tablica[i]);
              }
}
} 
0

W ramach kursu nauki wklejania kodu na forum - to mniej więcej wyglada tak:

import java.util.*;

class excel
{
    public static void main ( String[] args)
    {
        System.out.println("Witaj w programie kalkulator systematycznego oszczędzania.");
        System.out.println(" ");
        System.out.println(" ");

        Map<Integer, Double> mapaHarmonogramu;
        double wkwota = 0;
        double wynik=0;
        int lbmiesiecy;
        double procenty=0;
        double odsetki=0;
        double podatek=0;
        double skladka =0;
        Scanner podaj = new Scanner(System.in);
        int okres = 0;
        boolean niepoprawne = true;
        do {
            try {
                System.out.println("Podaj kwotę miesięcznej wpłaty (zł) :");
                skladka = podaj.nextDouble();
                if (skladka<=0) throw new Exception();

                System.out.println("Podaj czas oszczędzania (lata) :");
                okres = podaj.nextInt();
                if (okres<=0) throw new Exception();

                System.out.println("Podaj oprocentowanie roczne (%): ");
                double stopa = podaj.nextDouble();
                if (stopa>100) throw new IllegalArgumentException();
                if (stopa<=0) throw new Exception();

                System.out.println("Czy uwzględnić podatek? Wpisz 'tak' lub 'nie'");
                String pod = podaj.next();

                switch(pod) {
                    case "tak":
                        lbmiesiecy=okres*12;
                        procenty=(stopa/100/12);
                        wkwota = skladka*lbmiesiecy;
                        wynik = skladka*(0.81*(Math.pow(1+procenty,lbmiesiecy)-1)/procenty + (0.19*lbmiesiecy));
                        odsetki= wynik-wkwota;
                        podatek= (skladka*((Math.pow(1+procenty,lbmiesiecy)-1)/procenty)) - wynik;
                        break;
                    case "nie":
                        lbmiesiecy=okres*12;
                        procenty=(stopa/100/12);
                        wkwota = skladka*lbmiesiecy;
                        wynik = skladka*((Math.pow(1+procenty,lbmiesiecy)-1)/procenty);
                        odsetki=wynik-wkwota;
                        break;
                    default:
                        System.out.println("Wpisz: 'tak' lub 'nie'");
                        break;
                }
                System.out.println();
                System.out.printf("Wpłacono: %.2f zł \n", wkwota);
                System.out.printf("Suma odsetek: %.2f zł \n", odsetki);
                System.out.printf("Podatek: %.2f zł \n", podatek);
                System.out.printf("Całkowita zaoszczędzona kwota po %d latach: %.2f zł \n", okres, wynik);

                niepoprawne = false;
            } catch (InputMismatchException e) {
                System.out.println();
                System.err.println("Nie podałeś liczby.");
                podaj.nextLine();
                System.out.println("Wprowadz dane ponownie.");
                System.out.println();
            } catch (IllegalArgumentException ei) {
                System.out.println();
                System.err.println("Podałeś za dużą liczbę.");
                podaj.nextLine();
                System.out.println("Wprowadz dane ponownie.");
                System.out.println();
            } catch (Exception nve) {
                System.out.println();
                System.err.println("Podałeś liczbę ujemną.");
                podaj.nextLine();
                System.out.println("Wprowadz dane ponownie.");
                System.out.println();
            }
        } while (niepoprawne);
        podaj.close();

        System.out.println();
        System.out.println("Harmonogram oszczędności");
        System.out.println("Rok : Wartość");
        int i;
        double[] tablica = new double[okres*12];
        for (i=1;i<=okres; i++) {
            tablica[i] = skladka*((Math.pow(1+procenty,i*1/12)-1)/procenty);
        } for (i=1; i<=okres; i++) {
        System.out.println("Rok : Wartość" + tablica[i]);
    }

    }
}

Poprawiłem kilka czywistych błędów, ale nie mam pojęcia czy program teraz cokolwiek liczy dobrze, możesz sprawdzić.

0

Dzięki za cenne uwagi ;) A co do tablicy dwuwymiarowej? Ta poniżej jest prawie okej, tyle że pokazuje mi pierwszy wynik 1 raz, drugi wynik 2 razy itd... Jak to poprawić, żeby każdy wynik pokazywał się tylko raz?

int i, j;
double[][] tablica = new double[okres*12][okres*12];
	for (i=1; i<=okres; i++) {
	for (j=1; j<=i; j++) {
	tablica[i][j] = skladka*((Math.pow(1+procenty,i*12)-1)/procenty);
	  }
	 } for (i=1; i<=okres; i++) {
	   for (j=1; j<=i; j++) {
	System.out.printf("Rok %d: %.2f \n" , i, tablica[i][j]);
              }
           }
0

Nie widzę powodu do użycia tablicy dwuwymiarowej - chcesz wypisać tylko kolejne lata.
To liczy oszczędności w danym roku czy miesiącu?

tablica[i][j] = skladka*((Math.pow(1+procenty,i*12)-1)/procenty);

Do czego chcesz użyć zmiennej "j"?
Tak zagnieździłaś pętle. Jak skasujesz pętlę z "j" będzie się wyświetlało raz.

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