Výčet platidel – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výčet platidel – Java – Fórum – Programujte.comVýčet platidel – Java – Fórum – Programujte.com

 

Josef Hrdina
~ Anonymní uživatel
4 příspěvky
29. 12. 2016   #1
-
0
-

Dobrý den ,programuji výčetku platidel ,ale když ji spustím tak píše : ArrayIndexOutOfBoundsException: 11

s Arrayem nemam skoro žádné vzkušenosti. 

Žádám o pomoc a předem děkuji. Zde přikládám zdroják:

import java.io.*;
import java.util.ArrayList;
import java.util.List;


public class VycetkaPlatidel {

    static int plat;

    static int pocetBankovek(int hodnotaBankovky) {
        int pocet;
        pocet = plat / hodnotaBankovky;
        plat = plat % hodnotaBankovky;
        return pocet;
    }

    public static void main(String[] args) throws IOException {
        List<Integer> list = new ArrayList<Integer>();
        int platX;
        Sys.pln("Zadejte částku: ");
        plat = Sys.readInt();
        platX = plat;
        int[] pole = new int[11];
        BufferedReader br = new BufferedReader(new FileReader("vstup.txt"));
        String s = "";
        while ((s = br.readLine()) != null) {
            for (int i = 0; i < 12; i++) {
                list.add(Integer.parseInt(s));
            }
        }
        br.close();
        for (int i = 0; i < list.size(); i++) {
            pole[i] = pocetBankovek(list.get(i));
        }

        BufferedWriter bw = new BufferedWriter(new FileWriter("vystup.txt"));
        bw.write("Vyčtení částky " + platX + " je následující : " + pole[0] + "x5000" + " , " + pole[1] + "x2000" + " , " + pole[2] + "x1000");
        bw.newLine();
        bw.write(pole[3] + "x500" + " , " + pole[4] + "x200" + " , " + pole[5] + "x100");
        bw.newLine();
        bw.write(pole[6] + "x50" + " , " + pole[7] + "x20" + " , " + pole[8] + "x10");
        bw.newLine();
        bw.write(pole[9] + "x5" + " , " + pole[10] + "x2" + " , " + pole[11] + "x1");
        bw.newLine();
        bw.flush();
    }

}
Nahlásit jako SPAM
IP: 188.120.210.–
lukas.balaz0
Super člen
29. 12. 2016   #2
-
0
-

#1 Josef Hrdina
Chyba je v tom, že je až 12 typov bankoviek, ale na riadku

int[] pole = new int[11];

vytváraš miesto len na 11. Prepíš to na 12 a malo by to ísť. Ale:

celkovo v tom programe robíš zvláštne veci. Ak som správny pochopil, súbor vstup.txt obsahuje čísla 5000,2000,1000 atď. Ty tie čísla použíješ pri výpočte, ale pri vypisovaní ich máš už natvrdo napísané. Takže ak sa zmenia, výstup nebude dávať zmysel. Máš 2 možnosti: buď nečítaj nič zo súboru a len to pole natvrdo naplň tými číslami, alebo ak sa hodnoty bankoviek môžu meniť, tak musíš zmeniť 3 veci: 1) na výstupe musíš použiť hodnoty bankoviek zo súboru (a musíš to vypisovať v cykle, kedže nevieš ich počet). 2) polu, kde ukladáš výsledok, nemôžeš dať veľkosť natvro, ale v závislosti od počtu bankoviek. Lepšie ale bude tiež z toho urobiť ArrayList a len do neho dopĺňať. 3) Ak si nie si istý, že hodnoty bankoviek sú na vstupe usporiadané, musíš ich usporiadať, inak to nebude počítať správne.

Nahlásit jako SPAM
IP: 80.242.41.–
Josef Hrdina
~ Anonymní uživatel
4 příspěvky
30. 12. 2016   #3
-
0
-

#2 lukas.balaz
Děkuju moc. Pokusím se to přepsat.

Nahlásit jako SPAM
IP: 188.120.210.–
Josef Hrdina
~ Anonymní uživatel
4 příspěvky
30. 12. 2016   #4
-
0
-

#3 Josef Hrdina
Zde je výsledný program. 

import sugar.Sys;
import java.io.*;
import java.util.ArrayList;
import java.util.List;


public class VycetkaPlatidel {

    static int plat;
    public static ArrayList<Integer> pole = new ArrayList<Integer>();
    static int pocetBankovek(int hodnotaBankovky) {
        int pocet;
        pocet = plat / hodnotaBankovky;
        plat = plat % hodnotaBankovky;
        return pocet;
    }
    public void nacteni(){
    
    
    }
    public static void main(String[] args) throws IOException {
        try {
            FileInputStream fis = new FileInputStream("vstup.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String strLine;
            
            while ((strLine = br.readLine()) != null) {
                String[] s = strLine.split("\t");
                for (int i = 0; i < s.length; i++) {
                    pole.add(Integer.parseInt(s[i]));
                }
            }
        
        }
        catch(Exception e) {
            System.out.println("Nastala chyba:");
            System.out.println(e);
        }
        int platX;
        int[] vysledek = new int[12];
        Sys.pln("Zadejte částku: ");
        plat = Sys.readInt();
        platX = plat;
        for (int i = 0; i < pole.size(); i++) {
            vysledek[i] = pocetBankovek(pole.get(i));
        }
        BufferedWriter bw = new BufferedWriter(new FileWriter("vystup.txt"));
        bw.write("Vyčtení částky " + platX + " je následující : " + vysledek[0] + "x5000" + " , " + vysledek[1] + "x2000" + " , " + vysledek[2] + "x1000");
        bw.newLine();
        bw.write(vysledek[3] + "x500" + " , " + vysledek[4] + "x200" + " , " + vysledek[5] + "x100");
        bw.newLine();
        bw.write(vysledek[6] + "x50" + " , " + vysledek[7] + "x20" + " , " + vysledek[8] + "x10");
        bw.newLine();
        bw.write(vysledek[9] + "x5" + " , " + vysledek[10] + "x2" + " , " + vysledek[11] + "x1");
        bw.newLine();
        bw.flush();
     
        
        
    }

}
Nahlásit jako SPAM
IP: 188.120.210.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý