Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem JAVA přepsání hodnoty prvku pole

Dobrý den,
pokouším se naprogramovat jednoduchý program v javě, ale sekl jsem se na jendom problému.
Ve třídě mám vytvořené pole s 10 prvky. Potřeboval bych přepsat jeden prvek pomocí metody, je to možné?
Díky, stanley777.

Předmět Autor Datum
pole[index_prvku] = prvek; Jsi si jistý, že chápeš jak fungují pole?
Wikan 21.05.2013 10:56
Wikan
Je to možné. Popsané pseudo: něco pole(vracíme pole) název metody(Parametr pole, index který chceš…
MašinkaTomáš 21.05.2013 11:08
MašinkaTomáš
Tak jsem si hodnoty dal do textového souboru na řádky. Mám vytaženou hodnotu, kterou potřebuju přeps…
Stanley777 29.05.2013 13:23
Stanley777
Načíst z txt, upravit a opět do txt zapsat se stejnou datovou strukturou jako původně. EDIT: na čte…
freez2 29.05.2013 13:25
freez2
Když jsem se to pokoušel přepsat, tak mi v souboru zůstal pouze text, kterým jsem chtěl přepsat jeno…
Stanley777 29.05.2013 13:56
Stanley777
Musíš načíst úplně všechno a také úplně všechno zapsat. Texťáky nefungují tak, že načteš jen prostře…
freez2 29.05.2013 13:57
freez2
Zkusil jsem to s tím polem a nevypsal se mi žádný prvek, všechny byly null... :( stanley777
Stanley777 29.05.2013 19:44
Stanley777
Jak jsi to načítal a jak zapisoval?
freez2 29.05.2013 19:45
freez2
private String[] radky = new String[9]; // deklarace a inicializace pole s kurzy měn public String…
Stanley777 29.05.2013 19:50
Stanley777
Přepsal bych to na něco následujícího... public void ZmenKurzNakup(double castka, int mena) throws… poslední
freez2 29.05.2013 20:01
freez2
Asi jsem to špatně napsal. Pro upřesnění: Potřebuji přepsat obsah pole např. s indexem [5]. Omlouvám…
Stanley777 21.05.2013 13:06
Stanley777
Tak to je, jak napsal Wikan, Třeba, pokud chceš vložit do indexu 5 číslo 22 pole[5] = 22; Nezapom…
MašinkaTomáš 21.05.2013 14:02
MašinkaTomáš
Ano, dostal jsem to tam tak, že jsem si pole nadeklaroval. Pro lepší orientaci sem vložím kód. Kdy p…
Stanley777 21.05.2013 14:47
Stanley777
V tom případě by mělo být místo public double ZmenKurzProdej(double castka, int mena) { meny[mena]=…
freez2 21.05.2013 15:01
freez2
Pokud chceš ty hodnoty měnit, tak je musíš mít uložené mimo program, třeba v textovém souboru. V sam…
Wikan 21.05.2013 15:49
Wikan
he? ma tam normalne pole a moze ho menit, dokial program bezi tak si to aj zmenene hodnoty zapamata.…
MM.. 21.05.2013 15:54
MM..

Je to možné.

Popsané pseudo:

něco pole(vracíme pole) název metody(Parametr pole, index který chceš vyměnit, co chceš na to místo){

pole[který chceš vyměnit] = co chceš na to místo;

return pole;

}

Dá se to samozřejmě udělat X způsoby.

EDIT

public class VymenaIndexuPole {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String[] mojePole = { "a", "b", "c", "d", "e" };

		System.out.println("Seřazené pole: "+Arrays.toString(mojePole));

		int indexPoleCoChciVymenit = 0;
		int indexPoleSCimChciVymenit = 3;
		
		mojePole = VymenaIndexuPole(mojePole, indexPoleCoChciVymenit, indexPoleSCimChciVymenit);
		
		System.out.println("Prohozené indexi pole: "+Arrays.toString(mojePole));

	}
	
	public static String[] VymenaIndexuPole(String[] pole, int indexPoleCoChciVymenit,int indexPoleSCimChciVymenit ){
		
		String pomocna = pole[indexPoleCoChciVymenit];
		pole[indexPoleCoChciVymenit] = pole[indexPoleSCimChciVymenit];
		pole[indexPoleSCimChciVymenit] = pomocna;
		
		return pole;
		
	}

}

Pokud chceš pouze přepsat něčím jiným, snadno to edituješ.

Když jsem se to pokoušel přepsat, tak mi v souboru zůstal pouze text, kterým jsem chtěl přepsat jenom ten jeden řetězec.

public String ZmenKurzNakup(double castka, int mena) throws IOException
    {
            FileInputStream fstream = new FileInputStream("kurzy.txt");
            DataInputStream vstup = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(vstup));
            String castkas = String.valueOf(castka);
            String strLine = null;
            int i = 0;           
            while(i != mena+1)
            {
                strLine = br.readLine();
                i++;
            }
            String novy = strLine.replaceAll(strLine, castkas);
            
            vstup.close();
            return castkas;

Teď jsem se v tom ztratil a je z toho nějaká hatmatilka, kteerá nefunguje :/
stanley777

Musíš načíst úplně všechno a také úplně všechno zapsat. Texťáky nefungují tak, že načteš jen prostřední řádku a pak zapíšeš jen prostřední řádku - načíst vše, zapsat vše.

EDIT:
Můžeš si načíst celý texťák do pole (co řádka, to buňka v poli) a pak měnit hodnotu na příslušném místě a poté opět celé pole vypsat do texťáku (co buňka, to řádka).
Obě akce jsou velmi krátké cykly...

private String[] radky = new String[9]; // deklarace a inicializace pole s kurzy měn
public String ZmenKurzNakup(double castka, int mena) throws IOException
    {
            FileInputStream fstream = new FileInputStream("kurzy.txt");
            DataInputStream vstup = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(vstup));
            BufferedWriter bw = new BufferedWriter(new FileWriter ("kurzy.txt"));
            String castkas = String.valueOf(castka);
            String radek;
            String strLine = null;
            int x = 0;
            int i = 0; 
            int a = 0;
            
            while ((radek = br.readLine()) != null)   {
            radky[x]=radek;
            x++;
            
            }
            while(i != mena+1)
            {
                strLine = br.readLine();
                i++;
                radky[i]=strLine;
            }

            while(a < 10)
            {
                bw.write(radky[i]);
                a++;
                
            }
            
            
            bw.close();
            vstup.close();
}

Přepsal bych to na něco následujícího...

public void ZmenKurzNakup(double castka, int mena) throws IOException
    {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("kurzy.txt")));
            
            String radek;
            int x = 0;
            int i = 0; 
            
            //nacteni 9 radek
            while ((radek = br.readLine()) != null)   {
            	radky[x] = radek;
            	x++;
            }
            br.close(); //zavreni cteni
            
            while(i != mena+1){
            	radky[i] = castka+"";   //tady pocitam, ze chces na index 'i' ulozit tu novou castku, takze:
            }

            BufferedWriter bw = new BufferedWriter(new FileWriter ("kurzy.txt"));

            for(i = 0 ; i < radky.length ; i++){
            	bw.write(radky[i]); //zapsani vsech castek vcetne upraveny castky
            	bw.write("\n"); //odradkovani
            }
            
            
            bw.close(); //zavreni zapisu
      }

Nezapomeň, že pokud načítáš ze souboru a poté do něj chceš opět zapisovat, musíš ten čtecí buffer uzavřít PŘED TÍM, než začneš zapisovat. Po dokončení zápisu opět uzavřít zapisovací buffer.

Ano, dostal jsem to tam tak, že jsem si pole nadeklaroval.
Pro lepší orientaci sem vložím kód. Kdy použiju

pole[5]=22;

tak nezůstane hodnota v poli stejná, zůstane jenom při zpuštěném programu...
Potřeboval bych, aby hodnota přepsala a zůstala tam napořád.

public class Vypocet {
    protected double [] meny = new double[10];
    
    public Vypocet()
    {
        meny[0] = 25.561;   // Kurz na nákup EUR
        meny[1] = 19.954;   // Kurz na nákup USD
        meny[2] = 30.301;   // Kurz na nákup GBP
        meny[3] = 20.503;   // Kurz na nákup CHF
        meny[4] = 6.125;    // Kurz na nákup PLN
        meny[5] = 26.499;   // Kurz na prodej EUR
        meny[6] = 20.685;   // Kurz na prodej USD
        meny[7] = 31.412;   // Kurz na prodej GBP
        meny[8] = 21.255;   // Kurz na prodej CHF
        meny[9] = 6.349;    // Kurz na prodej PLN 
    }
    
    public int Nakup(int castka, int mena)
    {
        return (int)(castka*meny[mena]);
    }
    
    public int Prodej(int castka, int mena)
    {
        return (int)(castka*meny[mena+5]);
    }
    
    public double ZmenKurzNakup(double castka, int mena)
    {
        meny[mena]=castka;
        return meny[mena];
    }
    
    public double ZmenKurzProdej(double castka, int mena)
    {
        meny[mena]=castka;
        return meny[mena+5];
    }
    
}

he? ma tam normalne pole a moze ho menit, dokial program bezi tak si to aj zmenene hodnoty zapamata. Nepastol sem cely program nevieme co presne tam vola a co presne mu nefunguje.

P.S. Aha sorry uz to vidim "zustane jenom pri zpustenem programu". No samozrejme ze pole v RAM zustane jen pri spustenem programu, ked to chce pamatat naveky tak to musi dat do suboru/databazy/niekam na disk.

Zpět do poradny Odpovědět na původní otázku Nahoru