Kezdőoldal » Számítástechnika » Programozás » Java Ismétlődő elemek a tömbben?!

Java Ismétlődő elemek a tömbben?!

Figyelt kérdés

Feladat: Meg adok egy számot,az meghatározza a tömb méretét,majd felöltöm a tömböt egész számokkal.

Miután feltöltöm a tömböt megvizsgálom hogy van 1 benne olyan szám,ami 3x egymás után ismétlődik.Ha igen true,ha nem false.

pl: 5(ez a tömb mérete) --> 2 4 3 3 3 --> true

5 -> 3 1 3 1 3 --> false,mivel nem egymás után következnek a számok.

6 -> 3 1 3 5 5 5 -- > true

A jelenlegi kódom írom kommentben. Előre is köszönöm a segítséget!



2017. márc. 14. 13:18
 1/8 A kérdező kommentje:

public class Main {


public static Scanner sc = new Scanner(System.in);

public static void main(String[] args) {

int inNum = sc.nextInt();

int myArray [] = fillArray(inNum);

System.out.println(isContainDistinct(myArray));


}

public static int [] fillArray(int number){

int [] myArray = new int [number];

for(int i = 0; i < myArray.length; i++){

myArray[i] = sc.nextInt();

} return myArray;

}


public static boolean isContainDistinct(int[] arr) {

int count = 0;


for (int i = 0; i < arr.length; i++)


{


for (int j = 0; j < arr.length; j++) {

if (arr[i] == arr[j] && i != j) {

return true;


}else count++;

}

} return (count == 3);

}

}


Ez a akód jelenleg mindig true,ha talál ismétlődés tehát 5 --> 3 1 2 2 4 --> true és ez nem jó.

2017. márc. 14. 13:19
 2/8 A kérdező kommentje:
Kérdésben véletlen úgy írtam,hogy "van 1 benne olyan szám." azt szerettem volna,hogy "van-e benne olyan szám." Elnézést kérek az elírásért!
2017. márc. 14. 13:20
 3/8 anonim ***** válasza:

if (arr[i] == arr[j] && i != j) {

return true;


}


Ez mégis mi akarna itt lenni? Naná, hogy mindenre true-val tér vissza, hiszen levizsgálod, hogy egyenlő-e a két érték úgy, hogy nem azonos elemről van szó és ha igen, rögtön visszatérsz true-val... ergo, ha van a tömbben két egyforma érték akárhol, akkor rögtön true-val tér vissza.

2017. márc. 14. 14:10
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:

Jelenleg így fest a kódom.


public static boolean isContainDistinct(int[] arr) {


for (int i = 2; i < arr.length; i++) {

if (arr[i] == arr[i + 1] && arr[i] == arr[i + 2]) {

return true;

}

}

return false;

}


Ez részben jó is,de ha nagyobb számot kérek be a tömb méretének meghatározásánál,mint 5 akkor nem működik helyesen.Talán azért lehet,mivel i = 2 a cilusomban.Hogyan tudom azt kiküszöbölni,hogy minden egyes tömbméretnél működjön? Tehát 6 -> 5 5 5 4 4 1 és ne hiba üzenetet dobjon vissza.

2017. márc. 14. 14:33
 5/8 A kérdező kommentje:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6

at Main.isContainDistinct(Main.java:26)

at Main.main(Main.java:13)

2017. márc. 14. 14:33
 6/8 A kérdező kommentje:
for(int i = 0; i < arr.length-2; i++) így működik.Viszont,miért a tömb utolsó előtti elemétől kezdve vizsgáljuk?
2017. márc. 14. 14:34
 7/8 anonim ***** válasza:

if (arr[i] == arr[i + 1] && arr[i] == arr[i + 2])


Jééézusom! Összehasonlítod a mostani elemet a két utána következővel, de közben elmégy a tömb végéig?! Ne csodálkozz ha hibát dob. Mert ha 5 elemű a tömböd, akkor az 5. 6. és 7. elemet fogja próbálni hasonlítani.


Ilyen esetben illik visszafelé haladni a tömbben és i>=2-ig menni a ciklussal.

2017. márc. 14. 15:43
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
De kód hibátlanul működik.
2017. márc. 14. 16:06

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!