Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
programování mi nejde úplně nejlíp, ale chodím do třídy, kde to nejde skoro nikomu, tak moc prosím o jakoukoliv pomoc. Dostali jsme za úkol vytvořit pole, načtené ze souboru, kam uživatel zadá různé hodnoty, které si vymyslí. Program je pak převede do pole. Pole bude rozděleno úhlopříčkou z pravého horního rohu. Z levé horní části se vybere 3 nejmenší číslo. Z pravá dolní půlky se vybere 3 největší číslo. Obě čísla se i s indexy míst vypíší na obrazovku. Neumím to moc dobře vysvětlit. V programování jsem opravdu začátečník a uvítala bych každou radu. Největší problém mám s načtením pole z .txt souboru a vybrání správného čísla.
Předem děkuji za jakoukoliv odpověď
Offline
↑ Adell:
Ahoj, jde o dvojrozměrné pole (tj. matici)? je předem dána velikost pole a nebo ji máte nějak vydedukovat? V jakém to má být jazyce?
Offline
A je dán formát, v jakém budou ta čísla v souboru uložena? Např. co řádek souboru, to řádek v poli?...
Čísla mohou být jen přirozená?
Offline
Jo, jeden řádek v souboru je jeden řádek v poli. Čísla mohou být pouze celá, záporná i kladná.
příklad: uživatel zadá do textového dokumentu čísla(pole zadává přesně takto):
5,3,8
-2,4,12
50,-15,1
program vypíše:
3.nejmenší je 4 leží na souřadnici 2x2
3.největší je 8 leží na souřadnici 1x3 (nebo 3x1, nejsem si jistá, které se píše první)
Offline
↑ check_drummer:
Presny format nie je nutne treba (staci aby boli cele), len si treba napisat vlastny parser.
Priklad pre citanie zo standardneho vstupu, este ostava presmerovat zo suboru.
Offline
↑ Adell:
A bude ta matice vždy čtvercová?
Umíš načíst řádek ze vstupu?
Znáš základy javy? Umíš rozparsovat daný řetězec do pole?
Offline
Předpokládám, že matice bude čtvercová, takže ANO. Řádek načíst a vložit do pole umím, ale nevím, jak na další řádky pole, ani jestli je to ten správný způsob. Já to píšu takhle:
public static void main(String[] args) {
String adr="C:\\temp\\";
String text="";
String[] poleS=null;
try{
BufferedReader vst2=new BufferedReader(new FileReader(adr+"pole.txt"));
text=vst2.readLine();
poleS=text.split(" ");
vst2.close();
}catch(IOException E){
System.out.println("Chyba IO!");
}
int[] pole=new int[poleS.length];
for(int i=0;i<pole.length;i++){
pole[i]=Integer.parseInt(poleS[i]);
System.out.print(pole[i]+" ");
}
}
Jenže pak nevím, jak dál. Tady jsem skončila a ať napíšu cokoliv tak to nefunguje. Možná na to existuje nějaký jiný lepší způsob, ale ten já najít neumím. Nebo ho ani neznám.
Offline
↑ Adell:
No já javu neovládám, spíš jsem chtěl poradit jak na to algoritmicky. A co ti nejde - načíst druhý řádek?
Offline
↑ Adell:
musíš číst v cyklu (to znamená, že mezi BufferedReader vst2 a vs.close bude cyklus a zpracování řádku) dokud nedojdeš na konec souboru a v každém kole si ten řádek uložit (resp. ho zpracovat a uložit čísla). Takhle čteš jenom jeden řádek.
Na internetu jsou tucty návodů na práci se soubory.
Offline
no, já si načtu první řádek a pak nevím, co s ním. Jak ho někam uložit, nebo jak načíst další pomocí jednoho cyklu. Já javu taky moc neovládám, nevybírala jsem si v čem budu programovat a neučím se ji moc dlouho a když najdu nějaký návod na internetu, tak ho většinou nepochopím, což není správně a pracovat s něčím, co nechápu se mi nechce.
Offline
public class Main { public static void main(String[] args) { String adr = ""; String text = ""; //seznam radku - kazdy radek je pole hodnot rozparsovanych split() List<String[]> poleS = new ArrayList<String[]>(); try { BufferedReader vst2 = new BufferedReader(new FileReader(adr + "pole.txt")); //dokud se nedojde nakonec souboru //tak cteme radku a ukladame jednotlive hodnoty while ((text = vst2.readLine()) != null) { poleS.add(text.split(" ")); } vst2.close(); } catch (IOException E) { System.out.println("Chyba IO!"); } int[][] pole = new int[poleS.size()][poleS.get(0).length]; int delka = pole.length; //delka pole je delka seznamu int sirka = pole[0].length; //sirka - delka jednoho radku for (int i = 0; i < delka; i++) { for (int j = 0; j < sirka; j++) { pole[i][j] = Integer.parseInt(poleS.get(i)[j]); System.out.print(pole[i][j] + " "); } System.out.println(); } } }
co je za strukturu arraylist a jak se pouziva si najdi, já nemam cas. a nepouzivej absolutní cesty.
Offline
každý prvek toho seznamu poleS je pole o několika prvcích (jednotlivá čísla na řádku)
int[][] pole = new int[poleS.size()][poleS.get(0).length];
vytvori nove 2d pole s poctem radku o delce toho seznamu a sloupcu o delce prvniho radku seznamu
(poleS.get(0).length je delka prvniho radku - velikost toho pole)
poleS.get(i)[j] vybere i-ty radek seznamu a j-te cislo
Offline