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
Stránky: 1
dobrý den potřeboval bych pomoci s jedním polem, vstupem je pole libovolné velikosti, cílem je přeskupit v něm nějakým způsobem prvky, vypsat změněné pole a uložit to do souboru. Zkusit nějak ošetřit chyby od uživatele. Děkuji velice za pomoct či aspoň rady.
Offline

↑ Feers:
Co jsi zatím vymyslel?
Offline

↑ Feers:
To musí být Dvourozměrné pole? Řadit jednorozměrné by bylo asi jednoduší. Nebo chceš každý řádek seřadit jiným směrem.
Offline
Bohužel musí být Dvourozměrné. Potřebuji aby přesně jak říkáš 1.......10
20.....11
21.....30
Takhle se mi to zobrazilo no a potřebuji aby se mi to zapisovalo ještě k tomu i do souboru. kód jako takový jsem nějak napsal no, ale s tím zápisem do souboru mám problém a nejde mi to.
Offline

↑ Feers:
Z tebe to teda leze.
Jestli ty čísla mají být za sebou, tak prostě fci ve které naplňuješ pole přidáš ještě jeden parametr N (případně dva (N,M) jestli nemusí být čtvercová) a uloží se tolik čísel kolik je N*N (N*M) (rozměr matice).
Potom jenom obrátíš sudé řádky a je to.
Nebo jak načítáš ty hodnoty do pole?
Zápis do souboru
//Formátovaný zápis do souboru
String string="soubor.txt";
FileWriter out;
PrintWriter outP;
out = new FileWriter(string, false);
outP = new PrintWriter(out, true);
for (int i = 0; i < pole.lenght; i++)
for (int j = 0; j < pole.lenght; j++) {
outP.write(pole[i][j] + " ");
if (j == pole.lenght-1)
outP.write("\n");
}
out.close();
outP.close();Offline
Tohle je na mě už trošku složitější mohli byste mi to hodit do tohodle kódu :
package cviceni3;
public class Main
{
public static void main(String[] args)
{
int [][]pole = new int [10][10];
int pom = 1;
int pom2 = 20;
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(i%2 == 0)
{
pole[i][j]=pom++;
System.out.print(" "+pole[i][j]);
}
else
{
pole[i][j]=pom2--;
System.out.print(" "+pole[i][j]);
}
}
if(i%2 == 0)
{
pom2 = pom+9;
}
else
{
pom = pom2+11;
}
System.out.println();
}
}
}
Offline

↑ Feers:
Jednoduché, přidáš si třídu soubor(string, pole[][])
public static void soubor(String string, int pole[][]) {
try {
// Formátovaný zápis do souboru
FileWriter out;
PrintWriter outP;
out = new FileWriter(string, false);
outP = new PrintWriter(out, true);
for (int i = 0; i < pole.length; i++)
for (int j = 0; j < pole.length; j++) {
outP.write(pole[i][j] + " ");
if (j == pole.length-1)
outP.write("\n");
}
out.close();
outP.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}a zavoláš jí v main
soubor("soubor.txt", pole);Ten kód máš dost konkrétní, takže ho budeme muset trochu změnit
- čísla nahradíš proměnnou ve které máš uloženou velikost a nějak jí upravíš, aby odpovídala původní konkrétní hodnotě (přičteš, odečteš, ....něco)
Umíš načíst číslo z klávesnice do proměnné?
Offline

↑ Feers:
Dobře teda, i když to není moc pedagogické.
package cviceni3;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class RazeniPole {
//nacteni cisla z klavesnice
public static int ctiInt() {
byte[] pole = new byte[20];
String nacteno;
int i;
try {
System.in.read(pole);
nacteno = new String(pole).trim();
i = Integer.valueOf(nacteno).intValue();
return i;
} catch (IOException e) {
System.out.println("Chybne nactene cislo!");
return 0;
}
}
public static void soubor(String string, int[][] pole) {
try {
// Formátovaný zápis do souboru
FileWriter out;
PrintWriter outP;
out = new FileWriter(string, false);
outP = new PrintWriter(out, true);
for (int i = 0; i < pole.length; i++)
for (int j = 0; j < pole.length; j++) {
outP.write(pole[i][j] + " ");
if (j == pole.length - 1)
outP.write("\n");
}
out.close();
outP.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int n = 0, k = 1, l = 1;
System.out.print("Zadej velikost pole: ");
n = ctiInt();
int[][] pole = new int[n][n];
int pom = 1;
int pom2 = 2 * n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i % 2 == 0) {
pole[i][j] = pom++;
System.out.print(" " + pole[i][j]);
} else {
pole[i][j] = pom2--;
System.out.print(" " + pole[i][j]);
}
}
if (i % 2 == 0) {
pom2 = pom + (n - 1);
} else {
pom = pom2 + (n + 1);
}
System.out.println();
}
//volání fce pro zápis do souboru
soubor("soubor.txt", pole);
}
}Offline
Ahoj,
jenom doplním k Tvému (OOP) kódu:
1] K prvnímu bodu Ti dám plus, líbí se mi statika... Použití u souborů zcela na místě. ;-)
2] Pokud děláš catch (IOException e), pak to e můžeš přesně vypsat (myslím, že u toho dalšího už to máš správně).
3] Existují privátní proměnné třídy resp. datové složky třídy? Proč to píšu? Protože tím jsem chtěl říct, že bych to řešil tak, že bych raději vytvořit třídu Matice, kde by privátní položky tvořily počet sloupců, počet řádků (počet řádků postačí) + samotná matice (dvourozměrné pole). Výhoda je třeba v tom, že by Ti odpadl/y parametr/y z metody soubor! :-)
Takže bych si představoval opět něco podobného:
public class Matice
{
private int[][] pole;
private int pocetRadku;
private string str;
public Matice()
{
// vytvoření matice
}
public static int ctiInt()
{
// ...
}
public static void soubor()
{
// ...
}
}4] Hlavní metodu Main (nevím jak vy ve škole) bych dal (já osobně) do nové třídy (ale to je jenom otázka zvyku a přehlednosti).
5] Konstruktor/destruktor? Pokud používáš implicitní (bez parametrů), tak ok.
6] Jinak samozřejmě by to šlo rozložit (dále) na atomické objekty (jelikož takto to není ještě zcela úplně správně, ale dá se to pojmout a použít). Další třídu, o které bych nejspíš přemýšlel by byla třída řazení . Jednalo by se o abstraktní třídu, která by pak měla potomky select sort, insert sort, či třeba merge sort. No a objekt Matice by pak komunikoval právě s řazením... :-) Uff, to jsem se zase po dlouhé době rozepsal, tak asi tak. :-)
Jinak vidím, že autor je v začátcích, tak určitě Tvé řešení je optimální... Jednoduše, školním programátorským způsobem. No hlavně, že to bude fungovat, viď? :-) :-) :-) Pro tu jednoduchost můžeš přidat do mé třídy Matice ještě metodu Bubble sort. Jak říkám, nebude to úplně atomicky dobře, ale pro jednoduchou ukázku a demonstraci to zcela postačí. :-) :-)
Offline

↑ RePRO:
Díky za doplnění, já jsem mu to nechtěla zbytečně komplikovat a měnit (a abych řekla pravdu, tak jsem nad tím moc nepřemýšlela (a v Javě se také moc nevyznám) - nejsem tady od toho, abych mu programovala úkoly).
2] Pokud děláš catch (IOException e), pak to e můžeš přesně vypsat (myslím, že u toho dalšího už to máš správně).
Otázka je zda by tomu výpisu bylo rozumět. Určitě je dobře obojí (Herout by asi nenapsal v knize blbost).
3,5,6 - Souhlasím, kdybych to dělala pro sebe, tak bych to také tak udělala.
No hlavně, že to bude fungovat, viď?
Tohle jsi mohl odpustit.
Offline

↑ Feers:
Třída se musí jmenovat stejně jako soubor. Ty jsi si předtím pojmenoval soubor (a třídu) Main a já tam mam RazeniPole, tak budťto přejmenuj soubor nebo třídu.
Jestli používáš eclipse, tak si označ název třídy a pravým tlačítkem myši vyvolej menu -> QuickFix -> některou z položek (třeba první, pak se ti přejmenuje název souboru podle názvu třídy) .
Offline

↑ Feers:
Už ti to funguje? Jestli ano a nemáš už další dotazy, tak označ za vyřešené.
Offline
Použiješ new line, což se dělá programátorsky takto: "\n".
Offline

↑ Feers:
Aby se ti v souboru skutečně odřádkovalo musíš dát místo outP.write("\n"); tohle outP.write("\r\n"); (pokud máš windows)
Offline
Stránky: 1