hihixi Δημοσ. 2 Ιουνίου 2019 Δημοσ. 2 Ιουνίου 2019 Καλησπέρα, έχω μια απλή απορία σχετικά με ένα 2D Array στη Java. Έχω το παρακάτω πχ private Integer[][] matches; matches = new Integer[SIZE / 2][2]; όπου εντός του έχω διάφορους αριθμούς, πχ [[4, 5], [3, 0], [1, 9], [2, 6], [11, 8], [7, 10]] Θέλω να τσεκάρω λοιπόν αν δύο int μεταβλητές που παίρνω κατά την διάρκεια του προγράμματος βρίσκονται στην ίδια γραμμή. Για παράδειγμα αν οι μεταβλητές είναι το 4 & 5 να μου επιστρέφει 1, διαφορετικά αν είναι το 4 και το 8 να μου επιστρέφει 0 και ου το κάθε εξής. Δυστυχώς έχει κολλήσει το μυαλό μου και δε μπορώ να βγάλω άκρη. Αν υπάρχει και κάποιος πιο εύκολος / γρήγορος τρόπος ή κάποια άλλη πρόταση ώστε από ένα Array να φτιάχνω συνδυασμούς δύο αριθμών και έπειτα να ελέγχω αν οι αριθμοί ανήκουν στον ίδιο συνδυασμό, δεκτό φυσικά. Ευχαριστώ! :)
Moderators Kercyn Δημοσ. 2 Ιουνίου 2019 Moderators Δημοσ. 2 Ιουνίου 2019 Δες αυτό, απλώς αντί για string θα ψάχνεις ένα Array του οποίου τα στοιχεία θα είναι οι αριθμοί σου.
hihixi Δημοσ. 2 Ιουνίου 2019 Μέλος Δημοσ. 2 Ιουνίου 2019 (επεξεργασμένο) 36 λεπτά πριν, Kercyn είπε Δες αυτό, απλώς αντί για string θα ψάχνεις ένα Array του οποίου τα στοιχεία θα είναι οι αριθμοί σου. Αυτό όμως ψάχνει σε όλο το Array αν υπάρχουν οι αριθμοί που θα του δώσω ή κατάλαβα λάθος; Εγώ θέλω να τσεκάρω αν οι δύο αριθμοί που θα δώσω βρίσκονται στην ίδια σειρά του Array. Έχω δηλαδή εντός του, x συνδυασμούς από δυάδες αριθμών σε κάθε γραμμή και θέλω να τσεκάρω αν δύο αριθμοί είναι στην ίδια δυάδα / γραμμή. Μην με παραξεγείτε αν πω καμιά βλακεία, τώρα μαθαίνω 😃 Επεξ/σία 2 Ιουνίου 2019 από hihixi
Moderators Kercyn Δημοσ. 2 Ιουνίου 2019 Moderators Δημοσ. 2 Ιουνίου 2019 Το Array που έχεις είναι αυτό: [4, 5] [3, 0] [1, 9] [2, 6] [11, 8] [7, 10] Όπως βλέπεις, είναι ένα Array από Arrays. Η "ίδια γραμμή" που λες εσύ ουσιαστικά σημαίνει "ίδιο Array". Δηλαδή θες να δεις αν υπάρχει Array το οποίο αποτελείται από τους αριθμούς που δίνεις εσύ. Αν δώσεις, πχ, 4 και 5, τότε μέσα στο matches έχεις ένα άλλο Array που έχει μέσα τους αριθμούς 4 και 5. Αν δώσεις 3 και 8, τότε μέσα στο Array δεν υπάρχει Array που να έχει μέσα τους αριθμούς 3 και 8. Οπότε η διαδικασία είναι πρώτα να φτιάξουμε ένα Array με τους αριθμούς που θέλουμε και στη συνέχεια να ψάξουμε αν αυτό το Array υπάρχει μέσα στο matches.
hihixi Δημοσ. 2 Ιουνίου 2019 Μέλος Δημοσ. 2 Ιουνίου 2019 (επεξεργασμένο) Το δουλεύω και θα επανέλθω. Δώστε λίγο χρόνο όμως γιατί το "java.lang.NullPointerException" με έχει στοιχειώσει Edit: Έτοιμο το Array, τώρα πως το ελέγχω; Αυτό "boolean contains = IntStream.of(matches).anyMatch(array);" μου βγάζει: not suitable method found for of (Integer[][]) Επεξ/σία 2 Ιουνίου 2019 από hihixi
tsofras Δημοσ. 2 Ιουνίου 2019 Δημοσ. 2 Ιουνίου 2019 10 λεπτά πριν, hihixi είπε Το δουλεύω και θα επανέλθω. Δώστε λίγο χρόνο όμως γιατί το "java.lang.NullPointerException" με έχει στοιχειώσει Βάλε μας το NullPointer αν δεν βγάλεις άκρη να σε βοηθήσουμε
hihixi Δημοσ. 2 Ιουνίου 2019 Μέλος Δημοσ. 2 Ιουνίου 2019 Μόλις τώρα, tsofras είπε Βάλε μας το NullPointer αν δεν βγάλεις άκρη να σε βοηθήσουμε Όλο ξεχνάω να τα κάνω initialize για κάποιο λόγο 😪 Έκανα edit το παραπάνω μήνυμα αλλά με πρόλαβες.
tsofras Δημοσ. 2 Ιουνίου 2019 Δημοσ. 2 Ιουνίου 2019 1 λεπτό πριν, hihixi είπε Όλο ξεχνάω να τα κάνω initialize για κάποιο λόγο 😪 Έκανα edit το παραπάνω μήνυμα αλλά με πρόλαβες. ααα γιατί όταν το είδα πήγα πάνω να δώ αν έχεις κάνει init το array και ήταν 50 λεπτά πριν, Kercyn είπε Το Array που έχεις είναι αυτό: [4, 5] [3, 0] [1, 9] [2, 6] [11, 8] [7, 10] Όπως βλέπεις, είναι ένα Array από Arrays. Η "ίδια γραμμή" που λες εσύ ουσιαστικά σημαίνει "ίδιο Array". Δηλαδή θες να δεις αν υπάρχει Array το οποίο αποτελείται από τους αριθμούς που δίνεις εσύ. Αν δώσεις, πχ, 4 και 5, τότε μέσα στο matches έχεις ένα άλλο Array που έχει μέσα τους αριθμούς 4 και 5. Αν δώσεις 3 και 8, τότε μέσα στο Array δεν υπάρχει Array που να έχει μέσα τους αριθμούς 3 και 8. Οπότε η διαδικασία είναι πρώτα να φτιάξουμε ένα Array με τους αριθμούς που θέλουμε και στη συνέχεια να ψάξουμε αν αυτό το Array υπάρχει μέσα στο matches. Βασικά δεν ξέρω , αυτό που λές εσύ θέλει? Εγώ κατάλαβα χωρίς να περνάει αριθμό να συγκρίνει ουσιαστικά αν το array[0] έχει ίδια τιμή με το array[1] Σε απλή μορφή δηλαδή αυτό Spoiler Integer[][] matches = new Integer[][] { {4, 4}, {3, 0}, {1, 9}, {2, 6}, {11, 8}, {7, 10} }; System.out.println("Simple parse"); for (Integer[] integ : matches) { System.out.println(integ[0].equals(integ[1])); } Το έβαλα σε spoiler για να το παλέψει λίγο ο TS πριν το δεί , αν τελικά θέλει απλά αυτό. Τώρα αν θές να περνάς εσύ παράμετρο για να ψάξει τότε αυτό που σου είπε ο Kercyn
hihixi Δημοσ. 2 Ιουνίου 2019 Μέλος Δημοσ. 2 Ιουνίου 2019 Θέλω να του δίνω αριθμούς που προκύπτουν στην πορεία του προγράμματος και να κοιτάει αν οι δύο αυτοί αριθμοί είναι στην ίδια γραμμή του array[][]. Πχ, έχω το [4, 5] [3, 0] [1, 9] Αν του δώσω τους αριθμούς "8" και "3" να κοιτάει αν υπάρχουν και οι δύο αριθμοί σε κάποια από τις παραπάνω γραμμές. Από την στιγμή που δεν υπάρχουν θα επιστρέφει 0 πχ. Αν του δώσω "5" και "4" ή αντίστροφα, εφόσον υπάρχουν στην πρώτη γραμμή θέλω να μου επιστρέφει 1 πχ. Δεν με απασχολεί σε ποια γραμμή υπάρχουν και οι δύο αριθμοί, απλά αν υπάρχουν στην ίδια γραμμή.
tsofras Δημοσ. 2 Ιουνίου 2019 Δημοσ. 2 Ιουνίου 2019 Ok οπότε ότι είπε ο Kercyn , πάλεψε το και βάλε τον κώδικα να σου πούμε αν δυσκολευτείς
hihixi Δημοσ. 2 Ιουνίου 2019 Μέλος Δημοσ. 2 Ιουνίου 2019 (επεξεργασμένο) Αυτό που λέει ο @Kercyn πρέπει να το βάλω σε λούπα εφόσον το Array μου είναι 2D; Κάτι δηλαδή σαν το παρακάτω; for (int i = 0; i < matchesCol; i++) { for (int j = 0; j < matchesRows; j++) { boolean contains = IntStream.of(matches[i][j]).anyMatch(array); } } Το παραπάνω μου πετάει αυτό: https://prnt.sc/nwotj6 Ενώ αν το κάνω χωρίς for: https://prnt.sc/nwoskz Επεξ/σία 2 Ιουνίου 2019 από hihixi
k33theod Δημοσ. 2 Ιουνίου 2019 Δημοσ. 2 Ιουνίου 2019 (επεξεργασμένο) Έστω a,b οι δύο αριθμοί που θες να ελέγξεις αν υπάρχουν στο matches for (int i = 0; i < N/2; i++) { if (matches[i][0]==a && matches[i][1]==b)//ελέγχεις αν το 1o στοιχείο της γραμμής είναι ίσο με το α και το 2ο με το β return i; //αν θες ή το αντίστροφο το βάζεις μέσα στο if με ένα or } return -1; Επεξ/σία 2 Ιουνίου 2019 από k33theod
hihixi Δημοσ. 3 Ιουνίου 2019 Μέλος Δημοσ. 3 Ιουνίου 2019 Τελικά το έκανα πολύ μπακάλικα με το παρακάτω αλλά φαίνεται να δουλεύει. for (int i = 0; i < matchesCol; i++) { for (int j = 0; j < matchesRows; j++) { if (matches[i][0] == button1 && matches[i][1] == button2 || matches[i][0] == button2 && matches[i][1] == button1) { xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx } } } Αν έχει κάποιος κάποια πρόταση για να το σουλουπώσω λίγο, ευπρόσδεκτη.
tsofras Δημοσ. 3 Ιουνίου 2019 Δημοσ. 3 Ιουνίου 2019 56 λεπτά πριν, hihixi είπε Τελικά το έκανα πολύ μπακάλικα με το παρακάτω αλλά φαίνεται να δουλεύει. for (int i = 0; i < matchesCol; i++) { for (int j = 0; j < matchesRows; j++) { if (matches[i][0] == button1 && matches[i][1] == button2 || matches[i][0] == button2 && matches[i][1] == button1) { xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx } } } Αν έχει κάποιος κάποια πρόταση για να το σουλουπώσω λίγο, ευπρόσδεκτη. Ευχαρίστως αλλά δεν έχω καταλάβει τελικά τι θέλεις να κάνεις 😂 Ξεκίνησες με Integer arrays , ελέγχεις κάτι buttons.... Αν έχεις όρεξη πάρτο από την αρχή να δούμε τι θέλεις να κάνεις , το να φτιάξεις 5 if σε οποιαδήποτε γλώσσα προγραμματισμού είναι εύκολο. Για να μην είναι ο κώδικας όμως όπως τον έγραψες μπορεί να θέλει άλλη προσέγγιση. Φαντάζομαι ότι με την object oriented φύση της γλώσσας μπορούμε να το κάνουμε καλύτερο Τώρα αν σε απασχολεί απλά να δουλεύει οκ 😁
k33theod Δημοσ. 3 Ιουνίου 2019 Δημοσ. 3 Ιουνίου 2019 (επεξεργασμένο) 9 ώρες πριν, hihixi είπε Τελικά το έκανα πολύ μπακάλικα με το παρακάτω αλλά φαίνεται να δουλεύει. for (int i = 0; i < matchesCol; i++) { for (int j = 0; j < matchesRows; j++) { if (matches[i][0] == button1 && matches[i][1] == button2 || matches[i][0] == button2 && matches[i][1] == button1) { xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx } } } Αν έχει κάποιος κάποια πρόταση για να το σουλουπώσω λίγο, ευπρόσδεκτη. Η συνθήκη ελέγχου if είναι σωστή αυτό που είναι λάθος είναι τα for. To j δεν το χρησιμοποιείς άρα δεν χρειάζεται. Το i είναι η γραμμές, τις στηλές τις ελέγχεις με τους δείκτες 0,1. Δεν πρέπει γενικά να σκέφτεσαι σαν γραμμές στήλες, γιατί σε πίνακες με περισσότερες διαστάσεις θα μπερδευτείς. Κάθε στοιχείο της μορφής [a,b] είναι ένα στοιχείο του array σου. Δεν είναι μπακάλικο είναι οκ. Όταν μάθεις άλλες δομές και μεθόδους τι γλώσσας θα τις χρησιμοποιήσεις. Γενικά όσο πιο έτοιμα χαρακτηριστικά της γλώσσας χρησιμοποιείς τόσο λιγότερες είναι οι πιθανότητες να κάνεις λάθη. Αυτό όμως δεν σημαίνει ότι δεν πρέπει να γίνεις master στα for, if, while κλπ, τα οποία από γλώσσα σε γλώσσα δεν αλλάζουν. Τέλος όποτε έχεις αποροιές τι συμβαίνει και τι δεν πάει καλά χρησιμοποίεις DEBUGGER και μαθαίνεις να διαβάζεις τα error reports. tsofras αυτό που θέλει να κάνει είναι να ελέγξει αν το ζεύγος (button1, button2) είναι στον πίνακά του. Επεξ/σία 3 Ιουνίου 2019 από k33theod
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα