» »

[Java] Ali array vsebuje primitivno vrednost?

[Java] Ali array vsebuje primitivno vrednost?

draciel ::

primer:

int stevilke[] = {2,3,5,6,7,9,4};


Vprašanje 1.

Kako bi naredil če bi hotel vprašati: Ali array stevilke, vsebuje številko 5?

Vprašanje 2.
Kako bi naredil če bi hotel vprašati: Ali array stevilke, vsebuje številke med 5 ter 10 ?

Malo sem brskal okoli vendar imam s tem problem. Prišel sem do zaključka da bi sicer lahko uporabil ArrayList ter metodo contains() vendar po mojih informacijah je ArrayList samo za neprimitivne vrednosti, kar pa int ( v mojem primeru ) ni.

Mi lahko kdo pomaga? Hvala.

Sergio ::

Na pamet:

public static boolean containsEq(int[] arr, int i)
{
    for (int x : arr) 
    {
        if (x == i) return true;
    }

    return false;
}

public static boolean containsBetween(int[] arr, int i, int j)
{
    for (int x : arr)
    {
        if (x >= i && x <= j) return true;
    }

    return false;
}
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

draciel ::

hmm.. poglejte tukaj imam brezvezen programček. Je bolj tko za test da vidim če kaj znam, vendar očitno ne veliko ker mi program ne dela tistega kar želim.

Uglavnem..imam program, ki z vsakim pritiskom na gumb izbere random številko med 5 in 10. Z vsakim pritiskom na gumb program shrani v array določeno številko ki jo je zgeneriral.. npr če je številka 7. jo shrani v index 0 v arrayju ter te številke naprej NE prikaže, ter tako naprej dokler ne doseže zadnje pozicije v arrayju. Jaz sem spisal spodaj kodo. Men se zdi še kar logična. Zraven sem si za pomoč napisal komentarje. Ta koda mi je zelo logična ter smiselna, vendar ne deluje oz. deluje samo toliko da še vedno prikaže vse številke od 5 - 10. A bi lahko kdo pogledal kaj delam narobe?

do {
			
			for(int j = 0; j<usedNums.length; j++) {
				
				if(j >= MIN_VALUE && j <= MAX_VALUE) {
					
						break;					
				} else {
					
					generatedNum = oneToFive.nextInt(10-5+1)+5; // random številka se shrani v generatedNum
					usedNums[x] = generatedNum; // random številka se shrani v prvo pozicijo arraya ( 0 ).
					x++;	// poveča array za 1.
					tv.setText("Your number is "+generatedNum);
					
				}
				
			} // end for loop
			
		
			
		} // end do
		
		while(usedNums.length<5); // loop se izvaja vse dokler usedNums array ne doseže številke 4, oziroma manjše od 5.

^TMS^ ::

Težava je v tej vrstici, ker predvidevam, da je polje usedNums na začetku prazno, torej se zadeva v for zanki ne izvede. Prav tako je ena zanka preveč, odloči se katero boš odstranil, namesto končnega pogoja (usedLength) pa določi nekaj drugega. Recimo neko konstanto (5), kar pomeni, da ti bo zgeneriralo 5 naključnih števil.
 for(int j = 0; j<usedNums.length; j++)
To iterate is human, to recurse divine.

Meizu ::

Če programski jezik za preverjanje števil v arrayu nima že spisane funkcije v programski knjižnici, potem je tole stvar zelo elegantno rešiti z uporabo for zanke.

Enostavno se sprehodiš čez elemente v arrayu, postaviš if stavek, ki za vsak obrat for zanke čekira elemente po vrsti in če je element željeno število (to določiš v if stavku) sprogramiraš npr. da se zanka prekine in izpiše ven recimo "Število x v tem arrayu obstaja."

Rešitev problema v kodi ti je pa napisal že Sergio, le da je on rešitev zapisan v booleanovi logiki true ali false. Lahko pa tisto komod zamenjaš, ter vpelješ pod return nek string.

draciel ::

Aha.. ok, hvala vama fanta. Bom jutri zadevo preštudiral ker je sedaj mal ksno za mislit :D. Šeenkrat hvala za pomoč.. =)

snak3 ::

Drugače lahko uporabiš tudi ArrayList za int
ArrayList<Integer> list = new ArrayList<Integer>();

in potem lahko uporabiš contains().

jan_g ::

Ali pa Arrays.binarySearch(), ki zna delati tudi z arrayi s primitivi in ti vrne index kjer se število nahaja ali pa -1.

Moraš pa razmisliti tudi, kaj storiti, če imaš noter duplikate (v primeru, da te index iskanega sploh zanima).

Spura ::

jan_g je izjavil:

Ali pa Arrays.binarySearch(), ki zna delati tudi z arrayi s primitivi in ti vrne index kjer se število nahaja ali pa -1.

Moraš pa razmisliti tudi, kaj storiti, če imaš noter duplikate (v primeru, da te index iskanega sploh zanima).

Binary search dela samo na urejenih arrayih.

Ta koda mi je zelo logična

Stari ce je ena sama vrstica te kode logicna sm jst papez.
V napisanem programu je prakticno vse narobe napisano in narobe reseno. Dej ze enkrat vzam knjigo o javi v roko.
Da ne bos pisal takih cvetk kot:
while(usedNums.length<5); // loop se izvaja vse dokler usedNums array ne doseže številke 4, oziroma manjše od 5.

jan_g ::

Ja, jasno :-), pozabil posebej poudariti. Če je neurejen, potem je treba predhodno še posortirati s sort().

Drugače pa je koda čudna, ker se sprehaja čez array in potem primerja indexe namesto vrednosti. Isto pri 'generatedNum'. Index != vrednost. Ali pa slabo razumem, kaj sploh želi avtor doseči.

Zgodovina sprememb…

  • spremenil: jan_g ()

jan_g ::

Pa verjetno ne ve, da so arrayi statične strukture, jih ne moreš dinamično povečevati. Če to rabiš, potem arrayCopy ali pa listo.

gendale ::

nism bral teme, ampak če iščeš neko vrednost v tabeli greš čez s for zanko in primerjaš vsak element z iskanim
seznam zanč moderatorjev in razlogov da so zanč
http://pastebin.com/QiWny5dV
gor je mavrik apple uporabniček (mali možgani in mali penis)

t3hn0 ::

For je tvoj odgovor, Sergio je lepo napisal, le drug for ne bo delal kot bi ti hotel :)

public static void main(String[] args) {
    int stevilke[] = {2,3,5,6,7,9,4};
    if( containsEq(stevilke, 5)) System.out.println("Vsebuje 5!");
    else System.out.println("ni 5");

    if( containsBetween(stevilke, 2, 8) ) System.out.println("Vsa stevila so v obmocju");
    else  System.out.println("te pa niso v obmocju");
}

public static boolean containsEq(int[] arr, int i) {
    for (int x : arr) 
        if (x == i) return true;
    return false;
}
 
public static boolean containsBetween(int[] arr, int i, int j) {
    for (int x : arr)
        if (!(x >= i && x <= j)) return false; 
    return true;
}
^.^


Vredno ogleda ...

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

[Java - DN] Naključna števila

Oddelek: Šola
121280 (809) nyler
»

[Java] Integer ali int za List

Oddelek: Programiranje
142089 (1604) noraguta
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242057 (1393) NejcSSD
»

[Android] Nov tip shranjevanja slike

Oddelek: Programiranje
142086 (1210) urosz
»

Java-random-polje

Oddelek: Programiranje
6881 (760) LeQuack

Več podobnih tem