Java Ismétlődő elemek a tömbben?!
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!
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ó.
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.
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.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at Main.isContainDistinct(Main.java:26)
at Main.main(Main.java:13)
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!