Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

Problemy [programowanie] - Zmienna nie została zainicjalizowana [radar2()]

jedrus113 - 07-07-2009, 18:53
Temat postu: Zmienna nie została zainicjalizowana [radar2()]
Dzieńdobrywieczór!
Napisałem program, a raczej próbowałem napisać program który by mi powiedziała czy na planecie są wrogowie.
to co mi się udalo napisać:
Kod:
extern void object::Radar2()
{

string queen, egg, ant, spider, wasp, worm;

if(radar(AlienQueen) != null) queen == "Krolowa obcych";
if(radar(AlienEgg) != null) egg == ", jaja obcych";
if(radar(AlienAnt) != null) ant == "mrowki";
if(radar(AlienSpider) != null) spider == ", pajaki";
if(radar(AlienWasp) != null) wasp == ", osy";
if(radar(AlienWorm) != null) worm == ", robaki";

message("Na planecie wykryto "+queen+egg+ant+spider+wasp+worm+"!");

}


Ale gdy uruchomiam ten program to mnie się wyświetla "Zmienna nie została zainicjalizowana." Co to wogle znaczy? I co zrobiłem żle?
Czy muszę pozostawić probram w wersji 1.0:
Kod:
extern void object::Radar()
{

object item;

if(radar(AlienQueen) != null) message("Na planecie jest Krolowa obcych");
if(radar(AlienEgg) != null) message("Na planecie sa jaja obcych");
if(radar(AlienAnt) != null) message("Na planecie sa mrowki");
if(radar(AlienSpider) != null) message("Na planecie sa pajaki");
if(radar(AlienWasp) != null) message("Na planecie sa osy");
if(radar(AlienWorm) != null) message("Na planecie sa robaki");

}


ps. A przy okazji czy da się zrobić żeby peogram odrazu podawał ile jest tych wrogów?

adiblol - 07-07-2009, 19:11

Musisz zainicjować zmienne pustą wartością :P
jedrus113 - 07-07-2009, 19:28
Temat postu: Działa
adiblol napisał/a:
Musisz zainicjować zmienne pustą wartością :P

Działa dzięki adibol!!
Kod:
extern void object::Radar2()
{

string queen, egg, ant, spider, wasp, worm;

queen = "";
egg = "";
ant = "";
spider = "";
wasp = "";
worm = "";

if(radar(AlienQueen) != null) queen = " Krolowa obcych";
if(radar(AlienEgg) != null) egg = " jaja obcych";
if(radar(AlienAnt) != null) ant = " mrowki";
if(radar(AlienSpider) != null) spider = " pajaki";
if(radar(AlienWasp) != null) wasp = " osy";
if(radar(AlienWorm) != null) worm = " robaki";

message("Na planecie wykryto"+queen+egg+ant+spider+wasp+worm+"!");

}



A da się zrobić żeby program sprawdzał ile jest tych wrogów?

Schocker - 07-07-2009, 19:59

Czyżby coś w stylu "Szukaj wroga, jeśli jest, zapisz to w zmiennej i dodaj do innej 1..." Stop! Odwołuję! Chyba, że da się zrobić "Znajdź, wyklucz, znajdź następnego."...
jedrus113 - 07-07-2009, 20:49

Dobra już jest i działa Radar3.0
Kod:
int Compte(int cat) //cat - kategoria
{
int i, total;
object p;

total = 0;
for ( i=0 ; i<10000 ; i++ )
{
p = retobject(i);
if ( p == null ) break;
if ( p.category == cat ) total ++;
}
return total;
}
extern void object::Radar3()
{

message("Na planecie jest:");
if(radar(AlienQueen) != null)
{
int liczbakroli=Compte(AlienQueen);
message(Compte(AlienQueen)+"Krolowych obcych");
}

if(radar(AlienEgg) != null)
{
int liczbajaj=Compte(AlienEgg);
message(Compte(AlienEgg)+" jaj obcych");
}

if(radar(AlienAnt) != null)
{
int lczbamrowek=Compte(AlienAnt);
message(Compte(AlienAnt)+" mrowek");
}

if(radar(AlienSpider) != null)
{
int lczbapajakow=Compte(AlienSpider);
message(Compte(AlienSpider)+" pajakow");
}

if(radar(AlienWasp) != null)
{
int lczbaos=Compte(AlienSpider);
message(Compte(AlienSpider)+" os");
}

if(radar(AlienWorm) != null)
{
int lczbarobali=Compte(AlienWorm);
message(Compte(AlienWorm)+" robakow");
}

}

pipok - 08-07-2009, 13:32

adiblol napisał/a:
Musisz zainicjować zmienne pustą wartością :P
Nie rób koledze wody z mózgu :)
Błąd polegał na użyciu operatora "==", oznaczającego "czy jest równe?", zamiast operatora "=", oznaczającego "nadaj wartość".

Zapis
Cytat:
queen == "Krolowa obcych"
oznacza "sprawdź czy zmienna 'queen' ma wartość "Krolowa obcych"

Zapis
Cytat:
queen = "Krolowa obcych"
oznacza "przypisz zmiennej 'queen' wartość "Krolowa obcych"
adiblol - 08-07-2009, 13:41

Ja nie zauważyłem tego błędu, ale zauważyłem że jesli jakiegoś wroga nie ma to zmienna nie jest zainicjowana.
pipok - 08-07-2009, 14:09

adiblol napisał/a:
Ja nie zauważyłem tego błędu, ale zauważyłem że jesli jakiegoś wroga nie ma to zmienna nie jest zainicjowana.
Prawda :) A jak wróg jest, to też nie jest inicjowana :) )

jedrus113, napisanie "=" zamiast "==" (lub odwrotnie) to częsty błąd. Trzeba się pilnować, bo w wielu kontekstach formalnie obie konstrukcje są poprawne i tylko od zamiaru programisty zależy, która jest tą właściwą. Dlatego nie pojawia się komunikat o błędzie kompilacji, dopiero podczas wykonywania programu można wyłapać, że coś jest nie tak.

jedrus113 - 08-07-2009, 14:56

Moim zamiarem jest zniszczenie świata i do tego używam "=="!!
No w końcu czeba sobie jakoś radzić skoro w CBot'cie niema komendy "destoryThe(word)"

adiblol - 08-07-2009, 16:03

Jedrus, jeszcze jeden taki txt i warna dostajesz!

Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group