Witam.
Mam do zrobienia taki projekt. Jak na razie zrobiłem tyle . Mógłby mi ktoś wytłumaczyć dlaczego przez tą linijkę po naciśnięciu przycisku program “zamarza”?
for(j=0;j<=51;j++)
{
miejsce2=obiekt.nextInt(51);
talia_po[miejsce2]=talia_przed[j];
bla=0;
for(k=0;k<=j;k++)
{
if(talia_przed[k].equals(talia_po[miejsce2]))
{
[u][b]bla=1;[/b][/u]
break;
}
if(bla==1)
{
break;
}
}
if(bla==1)
{
j--;
}
}
_alex
([alex])
30 Maj 2010 16:21
#2
Zawieszenie się programu raczej nie w tym fragmencie.
Wg mnie źle do tego podchodzisz.
Najpierw wylosuj talie, oznaczasz karty numerkami 0…51
NrKarty/13 - to kolor np: 0-kier, 1-karo, 2-trefle, 3-piki
NrKarty%13 - to karta np: 0-2, 1-3, … 8-10, 9-J, 10-Q, 11-K, 12-A
wypełniasz Talia[52] liczbami 0…51 po kolei.
Losujesz liczbę X - 0…51 i wymieniasz wartości Talia[X] z Talia[0]
Potem losujesz liczbę X - 0…50 i wymieniasz wartości Talia[X] z Talia[1]
itd.
Jak masz wylosowaną talie to pierwsze 13 kart dajesz pierwszemu graczowi, kolejne 13 następnemu itd.
if(j==0)
{
pom2=piki[i][k];
if(pom2%13)
{
}
}
Dlaczego przy
pom2%13
wyświetla mi się:
incopatibile types
found: int
required: boolean
O co tu chodzi?
Całość: tutaj .
_alex
([alex])
30 Maj 2010 21:20
#4
if(pom2%13!=0) // w javie brak automatycznej konwersji int -> boolean
Ale głupi błąd. :oops:
Tylko teraz mam jakiś inny. Już wcześniej miałem tego typu i obszedłem go po prostu nie używając pętli ale wydaje mi się, że jak się tą pętle poprawi to będzie działać poprawnie.
Projekt do ściągnięcia
_alex
([alex])
30 Maj 2010 22:42
#6
Wklej kod, to się popatrzy. Ale prościej wkleić treść błędu oraz fragment kodu wokół miejsca wystąpienia.
Z rapiadshare nie łatwo się ściąga, właściwie mi nigdy się to nie udało, możliwe że u innych ten sam problem.
Sądziłem, że z rs’em nie będzie problemu.
//Tasowanie kart
Random obiekt=new Random();
int i,j,k,pom2,miejsce;
boolean jest=false;
double pom=0.0;
//Przypisywanie wartości
for(i=0;i<=51;i++)
{
talia_przed[i]=i;
}
for(i=0;i<=51;i++)
{
miejsce=obiekt.nextInt(51);
talia_po[i]=talia_przed[miejsce];
jest=false;
for(j=0;j<=51;j++)
{
if(talia_przed[miejsce]==talia_po[j])
{
jest=true;
break;
}
}
}
//Rozdawanie kart
for(i=0;i<=3;i++)
{
for(j=0;j<=12;j++)
{
pom=i+1/13;
if(pom==0.0)
{
piki[i][j]=talia_po[i*j];
}
if(pom==1.0)
{
trefle[i][j]=talia_po[i*j];
}
if(pom==2.0)
{
kiery[i][j]=talia_po[i*j];
}
if(pom==3.0)
{
kara[i][j]=talia_po[i*j];
}
}
}
west_1=" "; west_2=" "; west_3=" "; west_4=" ";
south_1=" "; south_2=" "; south_3=" "; south_4=" ";
north_1=" "; north_2=" "; north_3=" "; north_4=" ";
east_1=" "; east_2=" "; east_3=" "; east_4=" ";
for(i=0;i<=3;i++)//gracze
{
for(j=0;j<=3;j++)//kolory
{
for(k=0;k<=12;k++)//wartości kart
{
if(i==0)//gracz 1
{
if(j==0)//pierwszy kolor
{
pom2=piki[i][k];
if(pom2%13==0) west_1=west_1+" "+"A";
if(pom2%13==1) west_1=west_1+" "+"K";
if(pom2%13==2) west_1=west_1+" "+"D";
if(pom2%13==3) west_1=west_1+" "+"W";
if(pom2%13==4) west_1=west_1+" "+"10";
if(pom2%13==5) west_1=west_1+" "+"9";
if(pom2%13==6) west_1=west_1+" "+"8";
if(pom2%13==7) west_1=west_1+" "+"7";
if(pom2%13==8) west_1=west_1+" "+"6";
if(pom2%13==9) west_1=west_1+" "+"5";
if(pom2%13==10) west_1=west_1+" "+"4";
if(pom2%13==11) west_1=west_1+" "+"3";
if(pom2%13==12) west_1=west_1+" "+"2";
}
if(j==1)//drugi kolor
{
pom2=piki[i][k];
if(pom2%13==0) west_2=west_2+" "+"A";
if(pom2%13==1) west_2=west_2+" "+"K";
if(pom2%13==2) west_2=west_2+" "+"D";
if(pom2%13==3) west_2=west_2+" "+"W";
if(pom2%13==4) west_2=west_2+" "+"10";
if(pom2%13==5) west_2=west_2+" "+"9";
if(pom2%13==6) west_2=west_2+" "+"8";
if(pom2%13==7) west_2=west_2+" "+"7";
if(pom2%13==8) west_2=west_2+" "+"6";
if(pom2%13==9) west_2=west_2+" "+"5";
if(pom2%13==10) west_2=west_2+" "+"4";
if(pom2%13==11) west_2=west_2+" "+"3";
if(pom2%13==12) west_2=west_2+" "+"2";
}
if(j==0)//trzeci kolor
{
pom2=piki[i][k];
if(pom2%13==0) west_3=west_3+" "+"A";
if(pom2%13==1) west_3=west_3+" "+"K";
if(pom2%13==2) west_3=west_3+" "+"D";
if(pom2%13==3) west_3=west_3+" "+"W";
if(pom2%13==4) west_3=west_3+" "+"10";
if(pom2%13==5) west_3=west_3+" "+"9";
if(pom2%13==6) west_3=west_3+" "+"8";
if(pom2%13==7) west_3=west_3+" "+"7";
if(pom2%13==8) west_3=west_3+" "+"6";
if(pom2%13==9) west_3=west_3+" "+"5";
if(pom2%13==10) west_3=west_3+" "+"4";
if(pom2%13==11) west_3=west_3+" "+"3";
if(pom2%13==12) west_3=west_3+" "+"2";
}
if(j==1)//czwarty kolor
{
pom2=piki[i][k];
if(pom2%13==0) west_4=west_4+" "+"A";
if(pom2%13==1) west_4=west_4+" "+"K";
if(pom2%13==2) west_4=west_4+" "+"D";
if(pom2%13==3) west_4=west_4+" "+"W";
if(pom2%13==4) west_4=west_4+" "+"10";
if(pom2%13==5) west_4=west_4+" "+"9";
if(pom2%13==6) west_4=west_4+" "+"8";
if(pom2%13==7) west_4=west_4+" "+"7";
if(pom2%13==8) west_4=west_4+" "+"6";
if(pom2%13==9) west_4=west_4+" "+"5";
if(pom2%13==10) west_4=west_4+" "+"4";
if(pom2%13==11) west_4=west_4+" "+"3";
if(pom2%13==12) west_4=west_4+" "+"2";
}
}
}
}
}
Treści błędu nie ma bo problem polega na tym, że jak wylosuje jakąś kartę to wpisuje w 4 okna wszędzie jedną i tą samą kartę. Wkleiłem całość, dalej jest tylko umieszczanie w odpowiednich polach tekstu.
Nie mam pojęcia gdzie dokładnie tkwi problem, dlatego całość.
Projekt: Speedy Share , Rapidshare , Megaupload , mój hosting-bez limitów .
Dałoby radę jakoś łatwiej to napisać? Szczerze powiedziawszy prawie nic z tego nie rozumiem.
Jak wklejam całość do nowej klasy to wyświetla się kilka błędów i nawet nie mam jak sprawdzić co ten kod czyni.
java.util.Random rnd=new java.util.Random();
Domyślam się, że to jakaś deklaracja zmiennej, która będzie randomizowana (odpowniednik “randomize;” z - chyba - pascala). Jeżeli to jest to czy nie może być po prostu to czego ja użyłem?
if((p=(byte)rnd.nextInt(52-i))!=i)
Czarna magia.
for(i=0;i<52;i+=13) java.util.Arrays.sort(talia,0+i,13+i);
Jw. Wydaje mi się, że to jakaś funkcja wbudowana, która automatycznie jakoś sortuje. Dałoby rade posortować bez używania funkcji? Albo chociaż objaśnić jak owa funkcja działa?
p=(byte)(i*13); // karty i-go gracza od "p" do "p+12"
k=4; // za ostatnim kolorem
…czarnej magii ciąg dalszy.
(byte)
Co to w ogóle jest? Konwersja na typ byte? Ehh… :?
W ogóle to wolałbym abyś (w razie możliwości/chęci) poprawił mój kod aniżeli pisał swój, gdyż później będę musiał nauczycielowi tłumaczyć co i jak zrobiłem, a swój kod rozumiem.
_alex
([alex])
31 Maj 2010 14:39
#10
“rnd” jest odpowiednikiem twojego “obiekt” - zobacz gdzie go zadeklarowałeś.
if((p=(byte)(i+rnd.nextInt(52-i)))!=i)
to to samo co:
p=(byte)(i+rnd.nextInt(52-i)); // czyli oblicz “i+rnd.nextInt(52-i)” skonwertuj na “byte” przypisz do “p”
if(p!=i)
Jak działa funkcja java.util.Arrays.sort() znajdziesz w dokumentacji javy.
byte - to “taki int” tylko z mniejszym zakresem, (byte)wyrażenie - konwersja wyrażenia na typ byte
możesz zmienić deklaracje z:
byte talia[]=new byte[52];
byte i,k,p,t,c;
na:
int talia[]=new byte[52];
int i,k,p,t,c;
i wszędzie powywalać (byte)
Twój program nie da się naprawić - prawie każda instrukcja beznadziejnie bezsensowna.
Airborn
(Airborn)
31 Maj 2010 15:07
#11
Drakkainen , proszę poprawić tytuł tematu na konkretny, mówiący dokładniej o problemie. W przeciwnym razie temat zostanie przeniesiony do kosza.
Drakkainen
(Drakkainen1991)
2 Czerwiec 2010 09:38
#12
Trochę pozmieniałem Twój kod i teraz mi program znowu zamarza. Wiesz może dlaczego? Pętelek nie ruszałem.
java.util.Random rnd=new java.util.Random();
char kolory[]={'0','1','2','3'}; //piki,trefle,kiery,kara
String gracze[]={"North","West","South","East"};
String karty[]={"2","3","4","5","6","7","8","9","10","W","D","K","A"};
int talia[]=new int[52];
int i,k,p,t,c;
// posortowana talia
for(i=0;i<52;++i)
talia[i]=i;
// losujemy rozdanie
for(i=0;i<51;++i)
{
if((p=(i+rnd.nextInt(52-i)))!=i)
{
t=talia[i];
talia[i]=talia[p];
talia[p]=t;
}
}
// sortowanie dla każdego gracza
for(i=0;i<52;i+=13)
java.util.Arrays.sort(talia,0+i,13+i);
for(i=0;i<4;++i) // po graczam
{
//System.out.print("Gracz: "+gracze[i]);
p=i*13; // karty i-go gracza od "p" do "p+12"
k=4; // za ostatnim kolorem
for(t=p+12;t>=p;--t) // po kartam gracza, od końca aby AS był pierwszym
{
c=talia[t]/13; // kolor kolejnej karty
while(k>c) //System.out.print("\n"+kolory[--k]); // drukuj kolory
//System.out.print(" "+karty[talia[t]%13]);
if(gracze[i].equals("North"))
{
if(kolory[--k]==0) north_1=" "+karty[talia[t]%13];
if(kolory[--k]==1) north_2=" "+karty[talia[t]%13];
if(kolory[--k]==4) north_3=" "+karty[talia[t]%13];
if(kolory[--k]==3) north_4=" "+karty[talia[t]%13];
}
if(gracze[i].equals("West"))
{
if(kolory[--k]==0) west_1=" "+karty[talia[t]%13];
if(kolory[--k]==1) west_2=" "+karty[talia[t]%13];
if(kolory[--k]==4) west_3=" "+karty[talia[t]%13];
if(kolory[--k]==3) west_4=" "+karty[talia[t]%13];
}
if(gracze[i].equals("South"))
{
if(kolory[--k]==0) south_1=" "+karty[talia[t]%13];
if(kolory[--k]==1) south_2=" "+karty[talia[t]%13];
if(kolory[--k]==4) south_3=" "+karty[talia[t]%13];
if(kolory[--k]==3) south_4=" "+karty[talia[t]%13];
}
if(gracze[i].equals("East"))
{
if(kolory[--k]==0) east_1=" "+karty[talia[t]%13];
if(kolory[--k]==1) east_1=" "+karty[talia[t]%13];
if(kolory[--k]==4) east_1=" "+karty[talia[t]%13];
if(kolory[--k]==3) east_1=" "+karty[talia[t]%13];
}
}
Bezlitosny.
Teraz może być?
Drakkainen
(Drakkainen1991)
2 Czerwiec 2010 19:38
#14
Działa. Dziękuję za pomoc. Zauważyłem, że “praca” ze mną nie była dla Ciebie zachwycająca i dziwię się, że pomagałeś do końca. Tym bardziej dziękuję za poświęcony czas i włożoną w to energię.
Pozdrawiam. :]
_alex
([alex])
2 Czerwiec 2010 20:33
#15
Może dla tego że na ekranie ci się nie mieszczą.
Drakkainen
(Drakkainen1991)
2 Czerwiec 2010 20:34
#16
Nie… Wystarczyło, że wcisnąłem “Clean and Build Project” i zadziałało. Przeczytaj post wyżej. I jeszcze raz dziękuję. :]