Java Podstawy - pytanie
Re: Java Podstawy - pytanie
Raczkuję w javie a mam pewne zagadnienie do rozwiązania i nie wiem jak to rozwiązać.
Chcę utworzyć strukturę dwuwymiarową o następującym układzie kolumn:
numer ewidencyjny (int), nazwisko (string), numer klucza1 (int), numer klucza2 (int)
Wg tej struktury chcę tworzyć listę. Czy mogę do tego użyć ArrayList ? Chciałbym by liczba wpisów nie była ograniczona,
poza tym po zakończeniu operacji gdy lista będzie zapełniona chciałbym zawartość dopisać do pliku tekstowego.
Oczywiście chciałbym również na żądanie czytać ww. zbiór tekstowy i zapełnić listę.
Czy mógłbym prosić o jakiś przykład lub przynajmniej sugestię jak to ugryźć?
Chcę utworzyć strukturę dwuwymiarową o następującym układzie kolumn:
numer ewidencyjny (int), nazwisko (string), numer klucza1 (int), numer klucza2 (int)
Wg tej struktury chcę tworzyć listę. Czy mogę do tego użyć ArrayList ? Chciałbym by liczba wpisów nie była ograniczona,
poza tym po zakończeniu operacji gdy lista będzie zapełniona chciałbym zawartość dopisać do pliku tekstowego.
Oczywiście chciałbym również na żądanie czytać ww. zbiór tekstowy i zapełnić listę.
Czy mógłbym prosić o jakiś przykład lub przynajmniej sugestię jak to ugryźć?
Re: Java Podstawy - pytanie
Mapping oznacza z ang. przyporządkowanie, najlepiej skorzystaj do tego z Map, które objaśniam dokładnie w niniejszym kursie:
http://videokurs.pl/kurs-java-aspekty-zaawansowane.php
Właściwie to można też zrobić ArrayList of ArrayList i w poszczególnych ArrayListach mieć poszczególne kolumny.
http://videokurs.pl/kurs-java-aspekty-zaawansowane.php
Właściwie to można też zrobić ArrayList of ArrayList i w poszczególnych ArrayListach mieć poszczególne kolumny.
Re: Java Podstawy - pytanie
Raczej nie. Jeszcze mi nie leżą ArrayList czy LinkedList. Musze przespać temat.
To o co mi chodziło znalazłem w Lekcji 8 (Strumienie).
Jednak mam pewien problem z GregorianCallender.
Robię coś takiego (wydaje mi się, że tak samo jak w lekcji) :
GregorianCalendar kalendarz = new GregorianCalendar();
kalendarz.setTime(this.dataKolejnejGry); // deklaracja-> Date dataKolejnejGry;
Po wywołaniu pojawia mi się wyjątek: Exception in thread "main" java.lang.NullPointerException
Wskazywało by to, że nie tworzę obiektu, jednak nie wiem co może być źle.
Pewnie to jakiś szkolny błąd, lecz na chwilę obecną mam z tym problem.
To o co mi chodziło znalazłem w Lekcji 8 (Strumienie).
Jednak mam pewien problem z GregorianCallender.
Robię coś takiego (wydaje mi się, że tak samo jak w lekcji) :
GregorianCalendar kalendarz = new GregorianCalendar();
kalendarz.setTime(this.dataKolejnejGry); // deklaracja-> Date dataKolejnejGry;
Po wywołaniu pojawia mi się wyjątek: Exception in thread "main" java.lang.NullPointerException
Wskazywało by to, że nie tworzę obiektu, jednak nie wiem co może być źle.
Pewnie to jakiś szkolny błąd, lecz na chwilę obecną mam z tym problem.
Re: Java Podstawy - pytanie
Podaj cały kod w znacznikach code, bo ciężko się domyślać po tej Twojej deklaracji co dokładnie źle zrobiłeś.
Re: Java Podstawy - pytanie
Postaram się.
Programik ten ma na celu zapis do pliku informacji czy gracz wygrał, przegrał czy poddał grę.
Po zapisie odczytuję zawartość (tak jak na lekcji).
Aktualizacja pliku następuje po każdej grze. Zapisywane są tylko takie informacje: Nazwa Gracza, Ilość gier, Ile wygrał, Ile przegrał, Ile poddał.
Początkowo chciałem zapisywać jeszcze datę ostatniej gry lecz w programie jest trochę innych bardziej istotnych błędów więc zrezygnowałem.
Wynik działania diametralnie odbiega od oczekiwań:
Teraz muszę robić jakiś błąd lecz nie wiem co. Jeżeli nie sprawi to zbytnio kłopotu to prosiłbym o pomoc.
Klasa Statystyka :
Klasa zapisGry :
Klasa brakRekordu :
Wynik :
Zawartość pliku baza.txt :
Programik ten ma na celu zapis do pliku informacji czy gracz wygrał, przegrał czy poddał grę.
Po zapisie odczytuję zawartość (tak jak na lekcji).
Aktualizacja pliku następuje po każdej grze. Zapisywane są tylko takie informacje: Nazwa Gracza, Ilość gier, Ile wygrał, Ile przegrał, Ile poddał.
Początkowo chciałem zapisywać jeszcze datę ostatniej gry lecz w programie jest trochę innych bardziej istotnych błędów więc zrezygnowałem.
Wynik działania diametralnie odbiega od oczekiwań:
- Po otwarciu pliku, zapis widnieje w jednej linii a nie tak jak jest zaprezentowane na lekcji w kilku wierszach
błędnie wyliczana jest ilość rekordów. Wg programu jest 3 a nie 4.
błędnie wylicza RAF.length() . Wg programu RAF.length() = 176 //Nie wiem skąd to bierze?.
Teraz muszę robić jakiś błąd lecz nie wiem co. Jeżeli nie sprawi to zbytnio kłopotu to prosiłbym o pomoc.
Klasa Statystyka :
Code: Zaznacz cały
package statystyka;
import java.io.*;
public class Statystyka {
public static void main(String[] args) {
zapisGry[] zapG = new zapisGry[4];
zapG[0] = new zapisGry("Witek", 1, 0, 1, 0);
zapG[1] = new zapisGry("Jacek", 2, 1, 1, 0);
zapG[2] = new zapisGry("Jorek", 3, 2, 1, 0);
zapG[3] = new zapisGry("Piotr", 1, 1, 3, 0);
try
{
RandomAccessFile RAF = new RandomAccessFile("baza.txt", "rw");
RAF.seek(0);
zapisGry.zapiszDoPliku(zapG, RAF);
RAF.seek(0);
zapisGry[] infOGrze = zapisGry.odczytajZPliku(RAF);
for(int i=0; i<infOGrze.length; i++)
{
System.out.println(infOGrze[i].pobierzNazweGracza());
System.out.println(infOGrze[i].pobierzLiczbeGier());
System.out.println(infOGrze[i].pobierzLiczbeWygranychGier());
System.out.println(infOGrze[i].pobierzLiczbePrzegranychGier());
System.out.println(infOGrze[i].pobierzLiczbePoddanychGier());
System.out.println("-----------------------");
}
try
{
zapisGry b = new zapisGry();
b.czytajRekord(RAF, 3);
//System.out.println(b);
b.czytajDane(RAF);
//System.out.println("lala");
}
catch(BrakRekordu err)
{
System.out.println(err.getMessage());
}
RAF.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
Code: Zaznacz cały
package statystyka;
import java.io.*;
public class zapisGry {
public zapisGry()
{
this.nazwaGracza = " ";
this.liczbaGier = 0;
this.wygral = 0;
this.przegral = 0;
this.poddal = 0;
}
public zapisGry(String nazwaGracza, int liczbaGier, int wygral, int przegral, int poddal) //, int rokOd, int mmOd, int dzOd, int rokDo, int mmDo, int dzDo)
{
this();
this.nazwaGracza = nazwaGracza;
this.liczbaGier = liczbaGier;
this.wygral = wygral;
this.przegral = przegral;
this.poddal = poddal;
}
public String pobierzNazweGracza()
{
return this.nazwaGracza;
}
public int pobierzLiczbeGier()
{
return this.liczbaGier;
}
public int pobierzLiczbeWygranychGier()
{
return this.wygral;
}
public int pobierzLiczbePrzegranychGier()
{
return this.przegral;
}
public int pobierzLiczbePoddanychGier()
{
return this.poddal;
}
public static void zapiszDoPliku(zapisGry[] zapG, DataOutput outS) throws IOException
{
//System.out.println("zapG.length= "+zapG.length);
for(int i=0; i<zapG.length; i++)
{
zapG[i].zapiszDane(outS);
}
}
public void zapiszDane(DataOutput outS) throws IOException
{
//StringBuffer stringB = new StringBuffer(zapisGry.DLUGOSC_NAZWY_GRACZA);
StringBuilder stringB = new StringBuilder(zapisGry.DLUGOSC_NAZWY_GRACZA);
stringB.append(this.nazwaGracza);
stringB.setLength(zapisGry.DLUGOSC_NAZWY_GRACZA);
outS.writeChars(stringB.toString()); // zapis nazwy gracza do pliku
//System.out.println("W nazwaGracza"+stringB.toString());
outS.write(this.liczbaGier); // zapis liczby gier w których uczestniczył gracz
//System.out.println("W liczbaGier"+this.liczbaGier);
outS.write(this.wygral); // zapis liczby wygranych gier
//System.out.println("W wygral"+this.wygral);
outS.write(this.przegral); // zapis liczby przegranych gier
//System.out.println("W przegral"+this.przegral);
outS.write(this.poddal); // zapis liczby poddanych gier
//System.out.println("W poddal"+this.poddal);
}
public void czytajDane(DataInput inS) throws IOException
{
//StringBuffer tString = new StringBuffer(zapisGry.DLUGOSC_NAZWY_GRACZA);
StringBuilder tString = new StringBuilder(zapisGry.DLUGOSC_NAZWY_GRACZA);
for(int i=0; i<zapisGry.DLUGOSC_NAZWY_GRACZA; i++)
{
char tCh = inS.readChar();
if (tCh != '\0')
tString.append(tCh);
}
this.nazwaGracza = tString.toString();
this.liczbaGier = inS.readInt();
this.wygral = inS.readInt();
this.przegral = inS.readInt();
this.poddal = inS.readInt();
} // end-czytajDane
public static zapisGry[] odczytajZPliku(RandomAccessFile RAF) throws IOException
{
int ilRekordow = (int)(RAF.length()/zapisGry.DLUGOSC_REKORDU);
// System.out.println("WM ilRekordow= "+ilRekordow);
zapisGry[] zapG = new zapisGry[ilRekordow];
for(int i=0; i<ilRekordow; i++)
{
zapG[i] = new zapisGry();
zapG[i].czytajDane(RAF);
}
return zapG;
}
public void czytajRekord(RandomAccessFile RAF, int n) throws IOException, BrakRekordu
{
System.out.println("czytajRekord/RAF.LENGTH= "+RAF.length());
if(n<=RAF.length()/zapisGry.DLUGOSC_REKORDU)
{
RAF.seek((n-1)*zapisGry.DLUGOSC_REKORDU);
this.czytajDane(RAF);
}else
{
throw new BrakRekordu("Nie ma takiego rekordu!");
}
}
public static final int DLUGOSC_NAZWY_GRACZA = 20;
public static final int DLUGOSC_REKORDU = (Character.SIZE * DLUGOSC_NAZWY_GRACZA + 4*Integer.SIZE)/8;
private String nazwaGracza; // identyfikator gracza
private int liczbaGier; // w ilu grach gracz uczestniczyl
private int wygral; // liczba wygranych gier
private int przegral; // liczba przegranych gier
private int poddal; // liczba poddanych gier
}
Klasa brakRekordu :
Code: Zaznacz cały
package statystyka;
public class BrakRekordu extends Exception
{
public BrakRekordu()
{
super();
}
public BrakRekordu(String error)
{
super(error);
}
}
Wynik :
Code: Zaznacz cały
run:
Lenght= 3
DLUGOSC_NAZWY_GRACZA= 20
DLUGOSC_REKORDU= 56
Character.SIZE= 16
Integer.SIZE= 32
RAF.LENGTH 1= 176
Witek
16777472
4849761
6488165
7012352
-----------------------
ȁĀJore
7012352
0
0
0
-----------------------
̂ĀPiotr
0
0
0
0
-----------------------
czytajRekord/RAF.LENGTH= 176
null
BUILD SUCCESSFUL (total time: 0 seconds)
Code: Zaznacz cały
W i t e k J a c e k J o r e k P i o t r
Re: Java Podstawy - pytanie
Przepraszam za zamieszanie. Już doszedłem co było powodem mojej frustracji.
W klasie zapisGry() użyłem metody zamiast
Teraz już wszystko biega. Szkolny błąd.
W klasie zapisGry() użyłem metody
Code: Zaznacz cały
outS.write(this.*);
Code: Zaznacz cały
outS.writeInt(this.*);
Re: Java Podstawy - pytanie
Witam.
W jaki sposób można tworzyć biblioteki klas w javie tak by były widoczne w innych pakietach i projektach. Chciałbym utworzyć bibliotekę klas i później móc ją wykorzystać w innych projektach lub udostępniać kolegom. Nie chciałbym transportować źródeł lecz same, przekompilowane klasy. Troszeczkę o tym była mowa w lekcji 12 "Pakiety i modyfikatory dostępu", lecz to dotyczyło wyłącznie klas w pakietach wewnątrz tego samego projektu. Nie było problemu z kompilacją kodu. Brakuje mi wiedzy na ten temat i tego tematu w programie kursów. Proszę o wyjaśnienie lub podanie jakichś źródeł by można było o tym sobie poczytać.
Z góry dziękuję i pozdrawiam.
W jaki sposób można tworzyć biblioteki klas w javie tak by były widoczne w innych pakietach i projektach. Chciałbym utworzyć bibliotekę klas i później móc ją wykorzystać w innych projektach lub udostępniać kolegom. Nie chciałbym transportować źródeł lecz same, przekompilowane klasy. Troszeczkę o tym była mowa w lekcji 12 "Pakiety i modyfikatory dostępu", lecz to dotyczyło wyłącznie klas w pakietach wewnątrz tego samego projektu. Nie było problemu z kompilacją kodu. Brakuje mi wiedzy na ten temat i tego tematu w programie kursów. Proszę o wyjaśnienie lub podanie jakichś źródeł by można było o tym sobie poczytać.
Z góry dziękuję i pozdrawiam.