Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, έχω μια απλή απορία σχετικά με ένα 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 να φτιάχνω συνδυασμούς δύο αριθμών και έπειτα να ελέγχω αν οι αριθμοί ανήκουν στον ίδιο συνδυασμό, δεκτό φυσικά.

Ευχαριστώ! :)

  • Απαντ. 38
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ. (επεξεργασμένο)
36 λεπτά πριν, Kercyn είπε

Δες αυτό, απλώς αντί για string θα ψάχνεις ένα Array του οποίου τα στοιχεία θα είναι οι αριθμοί σου.

Αυτό όμως ψάχνει σε όλο το Array αν υπάρχουν οι αριθμοί που θα του δώσω ή κατάλαβα λάθος;

Εγώ θέλω να τσεκάρω αν οι δύο αριθμοί που θα δώσω βρίσκονται στην ίδια σειρά του Array.
Έχω δηλαδή εντός του, x συνδυασμούς από δυάδες αριθμών σε κάθε γραμμή και θέλω να τσεκάρω αν δύο αριθμοί είναι στην ίδια δυάδα / γραμμή.

Μην με παραξεγείτε αν πω καμιά βλακεία, τώρα μαθαίνω 😃

Επεξ/σία από hihixi
  • Moderators
Δημοσ.

Το 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.

Δημοσ. (επεξεργασμένο)

Το δουλεύω και θα επανέλθω. Δώστε λίγο χρόνο όμως γιατί το "java.lang.NullPointerException" με έχει στοιχειώσει :P

Edit: Έτοιμο το Array, τώρα πως το ελέγχω;
Αυτό "boolean contains = IntStream.of(matches).anyMatch(array);" μου βγάζει:

not suitable method found for of (Integer[][])

 

Επεξ/σία από hihixi
Δημοσ.
10 λεπτά πριν, hihixi είπε

Το δουλεύω και θα επανέλθω. Δώστε λίγο χρόνο όμως γιατί το "java.lang.NullPointerException" με έχει στοιχειώσει :P

Βάλε μας το NullPointer αν δεν βγάλεις άκρη να σε βοηθήσουμε 

Δημοσ.
Μόλις τώρα, tsofras είπε

Βάλε μας το NullPointer αν δεν βγάλεις άκρη να σε βοηθήσουμε 

Όλο ξεχνάω να τα κάνω initialize για κάποιο λόγο 😪
Έκανα edit το παραπάνω μήνυμα αλλά με πρόλαβες.

Δημοσ.
1 λεπτό πριν, hihixi είπε

Όλο ξεχνάω να τα κάνω initialize για κάποιο λόγο 😪
Έκανα edit το παραπάνω μήνυμα αλλά με πρόλαβες.

ααα γιατί όταν το είδα πήγα πάνω να δώ αν έχεις κάνει init το array και ήταν :D

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

Δημοσ.

Θέλω να του δίνω αριθμούς που προκύπτουν στην πορεία του προγράμματος και να κοιτάει αν οι δύο αυτοί αριθμοί είναι στην ίδια γραμμή του array[][].

Πχ, έχω το

[4, 5]
[3, 0]
[1, 9]

Αν του δώσω τους αριθμούς "8" και "3" να κοιτάει αν υπάρχουν και οι δύο αριθμοί σε κάποια από τις παραπάνω γραμμές. Από την στιγμή που δεν υπάρχουν θα επιστρέφει 0 πχ.
Αν του δώσω "5" και "4" ή αντίστροφα, εφόσον υπάρχουν στην πρώτη γραμμή θέλω να μου επιστρέφει 1 πχ. Δεν με απασχολεί σε ποια γραμμή υπάρχουν και οι δύο αριθμοί, απλά αν υπάρχουν στην ίδια γραμμή.

Δημοσ. (επεξεργασμένο)

Αυτό που λέει ο @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

 

Επεξ/σία από hihixi
Δημοσ. (επεξεργασμένο)

 Έστω 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;
 

 

Επεξ/σία από k33theod
Δημοσ.

Τελικά το έκανα πολύ μπακάλικα με το παρακάτω αλλά φαίνεται να δουλεύει.

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
    }
  }
}

Αν έχει κάποιος κάποια πρόταση για να το σουλουπώσω λίγο, ευπρόσδεκτη.

Δημοσ.
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 φύση της γλώσσας μπορούμε να το κάνουμε καλύτερο

Τώρα αν σε απασχολεί απλά να δουλεύει οκ 😁

Δημοσ. (επεξεργασμένο)
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) είναι στον πίνακά του. 

 

 

 

Επεξ/σία από k33theod

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...