J G

J G Programista Php,
Supremum SEO Sp. z
o.o.

Temat: Cześć potrzebuje pomocy :) chodzi o program

problem jest w tym że watek nie chce jakby zwrócić tablicy stringów
w wątki samym jako tako działa to bo wypisuje stringi
ale nie oddaje tablicy problem z wycinkiem

for (int j = 0; j < liczbaWatkow; ++j) {
if (j != liczbaWatkow) {
String l = kolejkaDoOdwiedzenia.get(0);
kolejkaDoOdwiedzenia.remove(0);
w[j] = new Watek(l);
w[j].start();
for (int k = 0; k < w[j].DoKolejki().length; ++k) {
kolejkaDoOdwiedzenia.add(w[j].DoKolejki()[k]);


}

package pl.krakow.up.inf3;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;

/**
*
* @author student
*/
public class Start {

private Properties p;

private void wczytajPlikKonfiguracyjny(String sciezka) {
p = new Properties();
try {
FileInputStream fis = new FileInputStream(sciezka);
p.load(fis);
} catch (FileNotFoundException ex) {
System.out.println("Blad strumienia");
} catch (IOException ex) {
System.out.println("Nie znaleziono pliku");
}
}

public static void main(String[] args) {
Start s = new Start();
s.wczytajPlikKonfiguracyjny(args[0]);
s.odwiedzajStrony("http://wp.pl");
}

public void odwiedzajStrony(String adresPoczatkowy) {
int liczbaWatkow = Integer.parseInt(p.getProperty("watki"));
ArrayList<String> kolejkaDoOdwiedzenia = new ArrayList<String>();
kolejkaDoOdwiedzenia.add(adresPoczatkowy);
Watek[] w = new Watek[liczbaWatkow];

while (!kolejkaDoOdwiedzenia.isEmpty()) {
for (int j = 0; j < liczbaWatkow; ++j) {
if (j != liczbaWatkow) {
String l = kolejkaDoOdwiedzenia.get(0);
kolejkaDoOdwiedzenia.remove(0);
w[j] = new Watek(l);
w[j].start();
for (int k = 0; k < w[j].DoKolejki().length; ++k) {
kolejkaDoOdwiedzenia.add(w[j].DoKolejki()[k]);


}

} else {
j = 0;
}
}
}
}
}
J G

J G Programista Php,
Supremum SEO Sp. z
o.o.

Temat: Cześć potrzebuje pomocy :) chodzi o program

Problem rozwiązany :)

konto usunięte

Temat: Cześć potrzebuje pomocy :) chodzi o program

Dziękujemy za kulturalne podanie rozwiązania problemu, na rzecz cywilizacji i innych użytkowników...

konto usunięte

Temat: Cześć potrzebuje pomocy :) chodzi o program

Jan Głogowski:
Problem rozwiązany :)

Kilka uwag odnośnie kodu przedstawionego wyżej. Zasadniczy problem jest taki, że jest on nieczytelny. Goldenline pozwala na wstawianie kodu na pomocą znaczników code a później /code ale te znaczniki muszą być w nawiasach kwadratowych (BB code). W ten sposób kod ładnie się wyświetli na forum, oczywiście nie będzie podświetlenia składni.

Poza tym kod powinien być sformatowany zgodnie z zasadami (w sieci są również odpowiednie programy służące do formatowania kodu). W ten sposób będzie on czytelny. Nazwenictwo zmienych, typów i klas również powinno podlegać pewnym zasadom, czyli takim by inny programista, który zmierzy się z tym kodem mógł łatwo dojść co jest czym. Nie ma żadnego problemu jeśli kod pisany jest tylko dla siebie, gorzej jeśli nad kodem pracuje więcej osób.
J G

J G Programista Php,
Supremum SEO Sp. z
o.o.

Temat: Cześć potrzebuje pomocy :) chodzi o program

Problem polegał na tym , że program główny przestawał chodzić zanim zaczął działać następny wątek trzeba było dodać zmienną boolen która sprawdzała czy wątek przestał już chodzić jeżeli nie to trzeba było usypiać program główny

konto usunięte

Temat: Cześć potrzebuje pomocy :) chodzi o program

Z tymi wątkami to trochę bardziej skomplikowana sprawa, co więcej nawet zaleca się unikanie ich stosowania kiedy nie ma takiej potrzeby.

Żeby to prościej zobrazować można posłużyć się następującym przykładem.

Załóżmy że na drodze prowadzone są prace i obowiązuje ruch wahadłowy. Gdyby nie było umieszczonej sygnalizacji świetlnej to byłaby taka sytuacja, że w najlepszym przypadku jeśli nie ma z przeciwnej strony nadjeżdżającego pojazdu to da się przejechać. Gorzej jeśli podczas przejazdu przypadkiem trafi się pojazd przejeżdżający w przeciwnym kierunku. Co to może oznaczać, chyba nie muszę wyjaśniać.

Aby takich sytuacji uniknąć stosuje się mechanizmy synchronizacji wątków (w tym przykładzie to sygnalizacja świetlna lub kierujący ruchem), polegające generalnie na tym że tylko jeden ma w danym odcinku czasu dostęp do tych samych zasobów, pozostałe muszą czekać.

Zmienna boolean sprawdzająca czy wątek poboczny przestał chodzić to coś w rodzaju semafora, gdzie program główny musiał czekać na zakończenie wątku pobocznego.

Tu jest więcej o wątkach i procesach:

http://www.zsoiz.home.pl/pliki/Procesy.htmDariusz Rorat edytował(a) ten post dnia 16.11.12 o godzinie 14:27

konto usunięte

Temat: Cześć potrzebuje pomocy :) chodzi o program

Nawet nie znając Javy przyczepiłbym się do kilku rzeczy w tym kodzie, z drugiej strony nie wiem czy to nie kod jednorazowy, dlatego nie bierz tego bardzo do siebie:

1) za kod typu poniżej grozi metafizyczna kara więzienia:

} else {
j = 0;
}
}
}
}
}


- nie wiadomo do czego ten else
- wielopoziomowe klamry powinny być oznaczane do czego są
- zmiennej "j" w C++ bym nie ustawił w tym miejscu, w Javie chyba też nie

2) Obsługa wyjątków polega na:
a) dodaniu więcej szczegółów do wyjątku i przekazaniu go dalej
b) zgaszeniu wyjątku z opcjonalnym zalogowaniem jego wszystkich detali

Kod:

} catch (IOException ex) {
System.out.println("Nie znaleziono pliku");
}


Wykonuje (b) ale nie do końca, bo:
- nie podałeś nazwy pliku
- nie podałeś klasy błędu

Taka obsługa exception (w każdym języku) to najszybsza droga do tego żeby współpracownicy / administracja Cię znienawidzili...

3) Nie stosuj zmiennych o nazwie "l", "O". Są za bardzo zbliżone do 1, I, 0.

4) Nie stosuj krótkich nazw do zmiennych nie-trywialnych (trywialne to np. indeksy tablicy).

Czyli zamiast:

String l = kolejkaDoOdwiedzenia.get(0);


Napisz:

String adres = kolejkaDoOdwiedzenia.get(0);


5) Jak już wspomniano wcześniej - dobry zwyczaj nakazuje: jeśli masz problem z kodem i pytasz o to na forum podać jego dokładne rozwiązanie także na forum - inaczej wątek powinien być usunięty bo potencjalni czytelnicy nie znajdą tu rozwiązania.

konto usunięte

Temat: Cześć potrzebuje pomocy :) chodzi o program

Proszę bardzo, ten sam kod który autor umieścił w pierwszym poście ale po formatowaniu:


for (int j = 0; j < liczbaWatkow; ++j)
{
if (j != liczbaWatkow)
{
String l = kolejkaDoOdwiedzenia.get(0);
kolejkaDoOdwiedzenia.remove(0);
w[j] = new Watek(l);
w[j].start();
for (int k = 0; k < w[j].DoKolejki().length; ++k)
{
kolejkaDoOdwiedzenia.add(w[j].DoKolejki()[k]);


}

package pl.krakow.up.inf3;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;

/**
*
* @author student
*/
public class Start
{

private Properties p;

private void wczytajPlikKonfiguracyjny(String sciezka)
{
p = new Properties();
try
{
FileInputStream fis = new FileInputStream(sciezka);
p.load(fis);
}
catch (FileNotFoundException ex)
{
System.out.println("Blad strumienia");
}
catch (IOException ex)
{
System.out.println("Nie znaleziono pliku");
}
}

public static void main(String[] args)
{
Start s = new Start();
s.wczytajPlikKonfiguracyjny(args[0]);
s.odwiedzajStrony("http://wp.pl");
}

public void odwiedzajStrony(String adresPoczatkowy)
{
int liczbaWatkow = Integer.parseInt(p.getProperty("watki"));
ArrayList < String > kolejkaDoOdwiedzenia = new ArrayList <
String > ();
kolejkaDoOdwiedzenia.add(adresPoczatkowy);
Watek[] w = new Watek[liczbaWatkow];

while (!kolejkaDoOdwiedzenia.isEmpty())
{
for (int j = 0; j < liczbaWatkow; ++j)
{
if (j != liczbaWatkow)
{
String l = kolejkaDoOdwiedzenia.get(0);
kolejkaDoOdwiedzenia.remove(0);
w[j] = new Watek(l);
w[j].start();
for (int k = 0; k < w[j].DoKolejki().length; ++k)
{
kolejkaDoOdwiedzenia.add(w[j].DoKolejki()[k]);


}

}
else
{
j = 0;
}
}
}
}
}



I jest różnica??? Dopiero teraz można to analizować. Zalecam więc autorowi trzymanie się tych zasad w każdym przypadku. Nie ma problemu jeśli to mała funkcja, gorzej jeśli jest to większy program. Wtedy bardzo trudno o lokalizację i poprawę błędów.

Następna dyskusja:

Potrzebuje pomocy za reklame




Wyślij zaproszenie do