Witam, mam do oddania jutro program symulujacy dostęp do dysków. Napisałem owo cudo, jednakże występuje mały problem z kompilacja. Otrzymuje błąd:
--------------------Configuration: <Default>--------------------
java.lang.NoClassDefFoundError: Symulacja
Caused by: java.lang.ClassNotFoundException: Symulacja
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"
Process completed.
Mam dwa pliki: Symulacja.java :
import java.io.*;
import java.util.Random;
public class Symulacja
{
public static void main(String args[]) throws IOException
{
BufferedReader wej = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer str = new StreamTokenizer(wej);
do
{
System.out.print("\fPodaj ilosc ciagow testowych: ");
str.nextToken();
final int N = (int) str.nval;
System.out.print("Podaj ilosc zadan w ciagu: ");
str.nextToken();
final int LZ = (int) str.nval;
System.out.print("Podaj rozmiar dysku: ");
str.nextToken();
final int RD = (int) str.nval;
System.out.print("Podaj maksymalny odstep czasu miedzy pojawieniem sie zadan: ");
str.nextToken();
final int maxOdstep = (int) str.nval;
System.out.print("Czy w symulacji moga pojawic się zadania z ograniczeniem czasowym (t/n): ");
Dysk.REAL_TIME = (wej.readLine().toLowerCase().charAt(0) == 't');
int DL = 3;
if (Dysk.REAL_TIME)
do
{
System.out.print("Srednio co ktore zadanie ma miec ograniczenie czasowe?: ");
str.nextToken();
}
while((DL = (int) str.nval) < 1);
int sumyPrzemieszczen[] = new int[4];
int sumyPrzekroczen[] = new int[4];
Dysk dyski[] = new Dysk[4];
dyski[0] = new Dysk(RD, Dysk.FCFS);
dyski[1] = new Dysk(RD, Dysk.SSTF);
dyski[2] = new Dysk(RD, Dysk.SCAN);
dyski[3] = new Dysk(RD, Dysk.C_SCAN);
Random rand = new Random();
for (int i = 0; i < N; i++)
{
dyski[0].resetuj(RD, Dysk.FCFS);
dyski[1].resetuj(RD, Dysk.SSTF);
dyski[2].resetuj(RD, Dysk.SCAN);
dyski[3].resetuj(RD, Dysk.C_SCAN);
for (int j = 0; j < LZ; j++)
{
int deadline = -1;
if (Dysk.REAL_TIME && rand.nextInt(DL) == 0)
deadline = rand.nextInt(RD) + RD/2;
int pozycja = rand.nextInt(RD);
for (int d = 0; d < 4; d++)
dyski[d].dodajZadanie(pozycja, deadline);
int odstep = 0;
while ((odstep = (int) (-(maxOdstep/2)*Math.log(rand.nextDouble()))) > maxOdstep);
for (int c = 0; c < odstep; c++)
for (int d = 0; d < 4; d++)
dyski[d].akcja();
}
for (int d = 0; d < 4; d++)
while (dyski[d].zajety())
dyski[d].akcja();
for (int d = 0; d < 4; d++)
{
sumyPrzemieszczen[d] += dyski[d].sumaPrzemieszczen();
sumyPrzekroczen[d] += dyski[d].przekroczoneDL();
}
}
System.out.println();
System.out.print("WYNIKI:");
System.out.print("\nFCFS" + (Dysk.REAL_TIME ? " (EDF):" : ":"));
System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[0] / N);
if (Dysk.REAL_TIME)
System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[0] / N);
System.out.print("\nSSTF" + (Dysk.REAL_TIME ? " (EDF):" : ":"));
System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[1] / N);
if (Dysk.REAL_TIME)
System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[1] / N);
System.out.print("\nSCAN" + (Dysk.REAL_TIME ? " (FD-SCAN):" : ":"));
System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[2] / N);
if (Dysk.REAL_TIME)
System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[2] / N);
System.out.print("\nC-SCAN" + (Dysk.REAL_TIME ? " (FD-SCAN):" : ":"));
System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[3] / N);
if (Dysk.REAL_TIME)
System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[3] / N);
System.out.println();
do
System.out.print("\nPowtorzyc (t/n) ? ");
while (str.nextToken() != str.TT_WORD);
}
while (str.sval.toLowerCase().charAt(0) != 'n');
System.out.println("\f\nDziekuje za uwage :)\n");
wej.read();
System.out.print('\f');
}
}
oraz Dysk.java:
public class Dysk
{
private Element dysk[];
private Element wartownikDysku;
private int liczbaZadan;
private int trybPracy;
private int pozycjaGlowicy;
private int celGlowicy;
private int czas;
private int przekroczoneDL;
private int sumaPrzemieszczen;
public static final int FCFS = 1;
public static final int SSTF = 2;
public static final int SCAN = 3;
public static final int C_SCAN = 4;
public static boolean REAL_TIME = true;
public Dysk(int rozmiar, int tryb) throws IllegalArgumentException
{
resetuj(rozmiar, tryb);
}
public void akcja()
{
if (celGlowicy != pozycjaGlowicy)
{
if (dysk[pozycjaGlowicy] != null)
switch (trybPracy)
{
case SCAN:
obsluz(pozycjaGlowicy);
break;
case C_SCAN:
if (celGlowicy > pozycjaGlowicy || dysk[celGlowicy].deadline != -1)
{
obsluz(pozycjaGlowicy);
break;
}
default:
pozycjaGlowicy += celGlowicy > pozycjaGlowicy ? 1 : -1;
sumaPrzemieszczen++;
}
else
{
pozycjaGlowicy += celGlowicy > pozycjaGlowicy ? 1 : -1;
sumaPrzemieszczen++;
}
}
else if (dysk[pozycjaGlowicy] != null)
obsluz(pozycjaGlowicy);
else if (trybPracy == 3 || trybPracy == 4)
celGlowicy = nastepneZadanie();
czas++;
}
private void obsluz(int pozycja)
{
Element e = dysk[pozycja];
if (e.deadline != -1 && e.deadline < czas)
przekroczoneDL++;
e.poprzedni.nastepny = e.nastepny;
e.nastepny.poprzedni = e.poprzedni;
dysk[pozycja] = null;
liczbaZadan--;
celGlowicy = nastepneZadanie();
}
private int nastepneZadanie()
{
if (liczbaZadan > 0)
{
Element nastepny = null;
if (REAL_TIME)
{
Element e = wartownikDysku.nastepny;
while (e != wartownikDysku)
{
if (e.deadline != -1 && (nastepny == null || nastepny.deadline > e.deadline))
nastepny = e;
e = e.nastepny;
}
}
if (nastepny == null)
{
switch (trybPracy)
{
case FCFS:
nastepny = wartownikDysku.nastepny;
for (Element e = nastepny.nastepny; e != wartownikDysku; e = e.nastepny)
if (e.czasZgloszenia < nastepny.czasZgloszenia)
nastepny = e;
break;
case SSTF:
Element e = wartownikDysku.nastepny;
while (e != wartownikDysku && e.pozycja < pozycjaGlowicy)
e = e.nastepny;
if (e == wartownikDysku)
nastepny = e.poprzedni;
else if (e.poprzedni == wartownikDysku)
nastepny = e;
else
nastepny = (e.pozycja - pozycjaGlowicy < pozycjaGlowicy - e.poprzedni.pozycja) ? e : e.poprzedni;
break;
case SCAN:
if (celGlowicy == pozycjaGlowicy)
{
if (pozycjaGlowicy == dysk.length - 1 && dysk[pozycjaGlowicy] == null)
return 0;
else if (dysk[pozycjaGlowicy] == null)
return dysk.length - 1;
}
else
return celGlowicy > pozycjaGlowicy ? dysk.length - 1 : 0;
case C_SCAN:
if (pozycjaGlowicy == dysk.length - 1 && dysk[pozycjaGlowicy] == null)
pozycjaGlowicy = 0;
return dysk.length - 1;
}
}
return nastepny.pozycja;
}
else
return pozycjaGlowicy;
}
public void resetuj(int rozmiar, int tryb) throws IllegalArgumentException
{
if (tryb > 0 && tryb < 5 && rozmiar > 0)
{
dysk = new Element[rozmiar];
wartownikDysku = new Element(null, -1, -2, 0, null);
wartownikDysku.nastepny = wartownikDysku.poprzedni = wartownikDysku;
trybPracy = tryb;
sumaPrzemieszczen = liczbaZadan = pozycjaGlowicy = celGlowicy = czas = przekroczoneDL = 0;
}
else
throw new IllegalArgumentException("Nieprawidlowy tryb pracy procesora");
}
public boolean zajety()
{
return liczbaZadan > 0;
}
public boolean dodajZadanie(int pozycja, int deadline)
{
if (deadline > -2 && pozycja >= 0 && pozycja < dysk.length && dysk[pozycja] == null)
{
Element e = wartownikDysku.nastepny;
while (e != wartownikDysku && e.pozycja < pozycja)
e = e.nastepny;
dysk[pozycja] = e.poprzedni = e.poprzedni.nastepny = new Element(e.poprzedni, pozycja, (deadline == -1 ? -1 : czas + deadline), czas, e);
liczbaZadan++;
celGlowicy = nastepneZadanie();
return true;
}
else
return false;
}
public int sumaPrzemieszczen()
{
return sumaPrzemieszczen;
}
public int czas()
{
return czas;
}
public int przekroczoneDL()
{
return przekroczoneDL;
}
private class Element
{
private int pozycja;
private int deadline;
private int czasZgloszenia;
private Element poprzedni;
private Element nastepny;
private Element(Element p, int war, int dl, int czas, Element n)
{
poprzedni = p;
pozycja = war;
deadline = dl;
czasZgloszenia = czas;
nastepny = n;
}
}
}
Proszę, uświadomcie mi moją tępote i wskażcie, gdzie popełniam błąd...