» »

Java pomoč

Java pomoč

Serial ::

Zdravo, imam en problemček pa bi bil vesel če bi pomagali :)

Imam par metod:

PRVA METODA:

public void kateri_key (KeyEvent e, String keyStatus){

int keyCode = e.getKeyCode();

// if (keyCode == e.VK_SPACE ){
// System.out.println("Space"); }
}


DRUGA METODA :

public void nastavi (){

int st = randGen.nextInt(3) + 1;

if(st==1){
...zdej tle nima veze kaj dela
// tle bi naprimer rad imel potem še preverjanje if keyCode == VK_A {print("a");}
}
}



public void startMouseClicked(java.awt.event.MouseEvent evt ) {
nastavi();
}


Kar bi jaz naredil je to da lahko uporabil iz metode kateri_key sledeče int keyCode = e.getKeyCode();
v metodi nastavi. Rad pač preverjal katero tipko je uporabnik stisnil in glede na to pač naredit nekaj. Nato pa bi to metodo natisni uporabil pri dogodku če je bil kliknjen določen gumb.
Sam mi ne uspe.
Probal sem vse skupaj dat v metodo nastavi ampak nisem prav naredil ker mi je metalo napako.
Nekje sem bral da naj naredim objekt keyevent in nevem kaj sam to mi tudi ni najbolje uspelo.

Upam da sem dal dovolj pojasnil.

Hvala za pomoč, Lp

Serial ::

Nima veze...že rešeno

Serial ::

Mam en naslednji problem.. kjer pa zadeva poči oziroma se neha odzivat
KODA:

public void displayInfo(KeyEvent e, String keyStatus) {

		int preveri = 0;
		String tocke = Integer.toString(preveri);
		int keyCode = e.getKeyCode();

		while (preveri == 0) {
			if ((desno1.getText() == "x = 8" && keyCode == e.VK_LEFT)
					|| (desno1.getText() == ("x = 18,5") && keyCode == e.VK_LEFT)
					|| (desno2.getText() == ("x = 0 ") && keyCode == e.VK_RIGHT)) {

				Dnastavi2();
				preveri++;
				System.out.print("Preveri je: " + preveri);
				igralec_desno_tock.setText(tocke);
				desno1.setEnabled(false);
				desno2.setEnabled(false);
			}
		}

		while (preveri == 1) {
			if ((desno3.getText() == "x=20 ; y=8" && keyCode == e.VK_LEFT)
					|| (desno4.getText() == ("x=3 ; y=4") && keyCode == e.VK_RIGHT)
					|| (desno4.getText() == ("x=49 ; y=7") && keyCode == e.VK_RIGHT)) {

				Dnastavi3();
				preveri++;
				System.out.print("Preveri je: " + preveri);
				igralec_desno_tock.setText(tocke);
				desno3.setEnabled(false);
				desno4.setEnabled(false);
			}
		}
}



Zadeva poči in nevem zakaj.. ima kdo kakšno idejo?


Lp



-- Dajmo se naučiti st.koda tage uporabljat zaradi preglednosti -- moderator

Zgodovina sprememb…

  • spremenil: Mavrik ()

waterdrop ::

Par stvari, ki bi lahko olajšale delo potencijalnemu pomagaču:
1. kaj pomeni "poči"?
2. na katerem mestu?

Serial ::

Zadevo zazenem in pri prvem while-u naredi se preveri++ (poveca preveri na 1) vendar Danstavi2 ne naredi in vse skupaj zamrzne.
Ce hocem zadevo potem prekinit morem naredit to iz konzole.

waterdrop ::

Ob predpostavki, da se v prvi while zanki preveri res nastavi na 1 lahko sklepam da ti zmrzne zato, ker se ulovi v drugo while zanko. Tisti if v drugi zanki se verjetno ne izvede, da bi spremenil vrednost. Zakaj domnevaš, da se Dnastavi2 ne izvede in kaj sploh ta metoda dela pa ne vem.

Serial ::

V bistvu se zgodi tudi to da nastavi preveri na 2...vendar ostalega ne naredi..
Dnastavix() metode pa delajo to, da dajo dajo tekst določenim gumbov.

Kaj bi imel kdo rešitev kako bi jaz drugače napisal vse skupaj da ne-bi bilo napake?

waterdrop ::

Če se nastavi na 2 potem bi moralo izstopit tudi iz druge zanke razen če se ne ustavi kje v Dnastavix(). Malo bolj točno bi moral specificirat problem, ker z vsakim odgovorm omenjaš novo težavo na podlagi zgornje kode.

Ko rečeš, da ostalega ne naredi ne vemo ali se nekaj sploh ne pokliče ali se nekaj ne nastavi po tvojih pričakovanjih, se pravi na vrednosti, ki jih želiš.

Dele kode, ki so ti sumljivi izoliraj in prepričaj se če ostalo deluje. Ko boš izoliral problem ga lahko bolj podrobno opišeš še za ostale ampak verjetno ga boš takrat že sam rešil.

p.s. Ne rabiš spreminjat "preveri" ampak lahko daš kar while (1) in namesto "preveri++" kličeš break, ki bo zapustil while zanko.

Zgodovina sprememb…

Serial ::

To se pravi, tisto glede while(1) namesto in namesto preveri++ da dam break ne znam naredit, oziroma se mi zdi da ne morem tko naredit v tem primeru.

Koda od Dnastavix() je taka

public void Dnastavi3() {

		int st = randGen.nextInt(3) + 1;

		System.out.println(st);

		if (st == 1) {
			tretji_nivo_desno.setText("4 je naravno število");
			desno5.setText("Da");
			desno6.setText("Ne");
		}

		else if (st == 2) {
			tretji_nivo_desno.setText("Pitagorov izrek velja za:");
			desno6.setText("Trikotnik");
			desno5.setText("Krožnico");
		} else {
			tretji_nivo_desno.setText("Kvadrat ima vse stranice:");
			desno6.setText("enake");
			desno5.setText("različne");
		}

	}


Tisto kodo sem neki spremenil in če dam break na mesto kjer sm ga dal lahko potem aplikacijo zaključim s pritiskom na X ne pa tako da jo morem ubit v konzoli.

public void displayInfo(KeyEvent e, String keyStatus) {

		int preveri = 0;
		String tocke = Integer.toString(preveri);
		int keyCode = e.getKeyCode();

		
		//while (preveri == 0) {
			while (preveri == 0){
				
			if ((desno1.getText() == "x = 8" && keyCode == e.VK_LEFT)
					|| (desno1.getText() == ("x = 18,5") && keyCode == e.VK_LEFT)
					|| (desno2.getText() == ("x = 0 ") && keyCode == e.VK_RIGHT)) {


			//	desno1.setText("Super");
			//	desno2.setText("Super");
				Dnastavi2();
				preveri++;
				System.out.println("Preveri je: " + preveri);
				igralec_desno_tock.setText(tocke);
				desno1.setEnabled(false);
				desno2.setEnabled(false);
				
			}
			break;	
		}


Teh while preveri bi mogu imet okoli 10. Zraven prilagam še eno jpg iz katerega bo mogoče razvidno kaj delam.



Da malo bolj razložim. V apletu imam gumb start, ko ga kliknem napiše v nivo 1 neko matematično izjavo. Ter gumb 1 in 2 sta dve možni rešitvi. Če preko keyeventa izbereš pravo rešitev se zažene Dnastavi2 ter da novo matematično formulo v nivo 2 ter dve novi možni rešitvi na gumba 3 in 4..in tako naprej..
Zdej v mojem primeru se včasih zgodi to da ko stisnem pravo rešitev od prvega nivoja se v konzoli izpiše "preveril je : 1" kar je tudi prav saj je spremenljivka preveri povečala za 1, ter v nivo 2 mi vpiše novo matematično formula ter gumb 3 in 4 dve možni rešitvi. Ko se to zgodi vse skupaj ustavi ter applet neha delovat glede keyeventov.
Druga varjanta pa je ta da ob pravi rešitvi prvega nivoja mi takoj izpiše nivo 2 in nivo 3 čeprav na nivo 2 nisem odgovarjal..

Zdi se mi da se to zgodi ker prvič ko js stisnem gumb da mi določi keyevent (oziroma katero tipko na tipkovnici sem stisnil) ostane ta v spominu in velja potem naprej..Jst pa bi mogu nardit da se za vsak nivo reštarta, če je to seveda problem..

Pa hvala waterdrop ki se ti da ukvarjat tle z mojimi java problemi.. se še učim :/

Zgodovina sprememb…

  • spremenil: Serial ()

Serial ::

Ugotovil sem to da mi keyevent po prvi stisnjeni tipki neha registrirat kaj tipkam?

Serial ::

Šel sem malo bolj sistematično skozi in nastalo je to:
int keyCode = e.getKeyCode();
		System.out.println("Število tipke je: "+keyCode);
		
		
		while (preveri ==0){
			if ((desno1.getText() == "x = 8" && keyCode == e.VK_LEFT)
					|| (desno1.getText() == ("x = 18,5") && keyCode == e.VK_LEFT)
					|| (desno2.getText() == ("x = 0 ") && keyCode == e.VK_RIGHT)){
				
				System.out.println("Število tipke pri preveri=0 je : "+keyCode);
				//desno1.setText("Super");
				//desno2.setText("Super");
				Dnastavi2();
				preveri++;
				String tocke = Integer.toString(preveri);
				System.out.println("Preveri je: " + preveri);
				igralec_desno_tock.setText(tocke);
				desno1.setEnabled(false);
				desno2.setEnabled(false);
				
			}
			else {System.out.println("Prišlo je do napake");}
			break;
		}
		
		
		while (preveri == 1){
			if  ((desno3.getText() == "x=20 ; y=8" && keyCode == e.VK_LEFT)
				|| (desno4.getText() == ("x=3 ; y=4") && keyCode == e.VK_RIGHT)
				|| (desno4.getText() == ("x=49 ; y=7") && keyCode == e.VK_RIGHT)) {
				
				System.out.println("Število tipke pri preveri=1 je : "+keyCode);
				//desno1.setText("Super");
				//desno2.setText("Super");
				Dnastavi3();
				preveri++;
				String tocke = Integer.toString(preveri);
				System.out.println("Preveri je: " + preveri);
				igralec_desno_tock.setText(tocke);
				desno3.setEnabled(false);
				desno4.setEnabled(false);
			}
		
                        System.out.println("Prišlo je do napake res");
			break;
		}
		



ko je preveri == 0 in gre v prvi while naredi vse kot je treba vendar potem ko gre preveri == 1 mi pa kr preskoči if pri drugem while in vrže napako "Prišlo je do napake res" oziroma če se rešitvi prvega in drugega nivoja skladajo (da je bil pri nivoju ena kliknjen naprimer gumb LEFT in da bi bila ta rešitev pravilna tudi za drugi nivo) mi naredi ukaze ki pridejo če je izpolnjen if pri drugem while-u ter mi nato vseeno izpiše "Prišlo je do napake res".
Te dve varjanti zapisa sta možni pri konzoli:

Število tipke pri preveri=0 je : 39
Dnastavi2 st je: 2
Preveri je: 1
Število tipke pri preveri=1 je : 39
Dnastavi3 st je: 2
Preveri je: 2
Prišlo je do napake res

ALI

Število tipke pri preveri=0 je : 39
Dnastavi2 st je: 1
Preveri je: 1
Prišlo je do napake res

waterdrop ::

Serial je izjavil:



Zdi se mi da se to zgodi ker prvič ko js stisnem gumb da mi določi keyevent (oziroma katero tipko na tipkovnici sem stisnil) ostane ta v spominu in velja potem naprej..Jst pa bi mogu nardit da se za vsak nivo reštarta, če je to seveda problem..



Sam si ugotovil zakaj ne dela. Ko pritisneš tipko se sproži nek keyevent, ki pokliče metodo DisplayInfo. Dokler se metoda ne izvede se ti applet ne bo odzival. Zmrzne ti zato, ker ostane ujet v drugi zanki, ker tam se pogoji nikoli ne izpolnijo, da bi se zanka zapustila (kot si ugotovil, keyevent ima vedno isto vrednost).

waterdrop ::

Serial je izjavil:

Šel sem malo bolj sistematično skozi in nastalo je to:

ko je preveri == 0 in gre v prvi while naredi vse kot je treba vendar potem ko gre preveri == 1 mi pa kr preskoči if pri drugem while in vrže napako "Prišlo je do napake res"


Glede while in break sem mislil tako kot je spodaj. While (1) pomeni, da se bo ves čas izvajalo to kar je v zanki. Ko se if izpolni, namesto, da prekineš zanko z vrednostjo preveri++, jo na koncu if stavka prekineš z break. Torej ob pritisku prave tipke in izvedbe kode znotraj if se zanka prekine. Če daš break na tisto mesto, kot si ga dal ti, potem se zanka izvede samo 1x, neglede na to ali je izpolnjen if pogoj ali ne.

		while (1) {
			if ((desno1.getText() == "x = 8" && keyCode == e.VK_LEFT)
					|| (desno1.getText() == ("x = 18,5") && keyCode == e.VK_LEFT)
					|| (desno2.getText() == ("x = 0 ") && keyCode == e.VK_RIGHT)){
				
				System.out.println("Število tipke pri preveri=0 je : "+keyCode);
				//desno1.setText("Super");
				//desno2.setText("Super");
				Dnastavi2();
				String tocke = Integer.toString(preveri);
				System.out.println("Preveri je: " + preveri);
				igralec_desno_tock.setText(tocke);
				desno1.setEnabled(false);
				desno2.setEnabled(false);
                                break;
			}
			else {System.out.println("Prišlo je do napake");}
		}

Serial ::

Hvala :)

PS: Mislim da bom kmalu spet neki postal ker zdej pa je prišlo do obratnega problema ki še ne razumem zakaj se dogaja.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java]Problem z vektorjem

Oddelek: Programiranje
91427 (1296) KernelPanic
»

[java] Osnovna vprašanja

Oddelek: Programiranje
372624 (1631) killa bee
»

Ali uporabljate apple izdelke? (strani: 1 2 3 4 )

Oddelek: Loža
16732874 (29066) Matjaz4
»

Javascript - izračun razlike v datumih

Oddelek: Programiranje
81913 (1768) kogledom
»

[Java] Zagon appleta v HTML

Oddelek: Programiranje
161541 (1363) Bela01

Več podobnih tem