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

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

Δημοσ.

Δεν μπορώ να καταλάβω γιατί ψαχνόμουν και δεν πήγα στις εύκολες λύσεις με loop/if.

Το j ισχύει ότι δε χρησιμοποιείτε, ξέχασα να αλλάξω τα 0, 1. Γι αυτό το λόγο το έχω βάλει, σε περίπτωση που αλλάξει ο 2D πίνακας δηλαδή να μην χαλάσει ο παραπάνω κώδικας.

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

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

Επισκέπτης
Δημοσ. (επεξεργασμένο)

Εφόσον είναι απαραίτητη συνθήκη να υπάρχουν και οι δύο αριθμοί, ψάχνεις τον πίνακα για τον ένα και αν τον βρεις ελέγχεις αν ο διπλανός του είναι ο δεύτερος αριθμός. Ο πίνακας σου είναι n-γραμμές Χ 2 στήλες.

Κάτι τέτοιο:

public class Insomnia {

   public static boolean ins(int a, int b){
       int i,j,z;
       boolean bing = false;
       int[][] times = {{1,2},{4,5}};
       for(i=0;i<=1;i++){
           z=1;
           for(j=0;j<=1;j++){
          
               if(times[i][j]==a){
                   if(times[i][z]==b){
                       bing = true;
                       break;
                   }
                }
               z--;
            }
       }
    return bing;
   }
        
    public static void main(String[] args) {
        // TODO code application logic here
        
      int[][]  log = {{1,2},{4,5}}; 
        System.out.print(ins(4,2));                 
    }    
}

Έλεγξε το έχω χρόνια να γράψω java, τώρα για τους δείκτες των πινάκων φτιάξτους ανάλογα.

Επεξ/σία από Επισκέπτης
Δημοσ. (επεξεργασμένο)
5 ώρες πριν, k33theod είπε

 

tsofras

αυτό που θέλει να κάνει είναι να ελέγξει αν το ζεύγος (button1, button2) είναι στον πίνακά του. 

Ναι το κατάλαβα αυτό :D

Τι αντικείμενο όμως είναι το button ? Βλέπω χρησιμοποιεί == και όχι equals , οπότε θέλω να δώ αν έχει καταλάβει την διαφορά ο TS και αν το χρησιμοποιεί σωστά

Βάζω και αυτό αν θέλει να διαβάσει ο TS σε περίπτωση που δεν το γνωρίζει

https://www.geeksforgeeks.org/difference-equals-method-java/

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

Βασικά το equals είναι το σωστό αλλά έτσι όπως έχει υλοποιηθεί και τα δύο μου δίνουν το ίδιο αποτέλεσμα.
Τελικά στο τρέχον πρότζεκτ σε όλα χαζά κολλάω και στα απλής λογικής. Το μυαλό μου δε το γουστάρει φαίνεται και κάνει αντιπερισπασμό :P

Τώρα έχω κολλήσει στο παρακάτω:
Μέσα στο πρόγραμμα έχω κουμπιά. Κάθε φορά που πατιέται κάποιο θέλω να παίρνω τον αριθμό του, να τον κρατάω κάπου και μόλις πατηθεί το δεύτερο κάνω τον έλεγχο με την if παραπάνω για να δω αν υπάρχουν στο 2D Array στην ίδια γραμμή.

Τους δύο αριθμούς αυτούς πως να τους αποθηκεύσω και που;
Τώρα έχω δύο μεταβλητές στην αρχή του προγράμματος, καλώ μια μέθοδο όπου παίρνει τον αριθμό του κουμπιού που πατήθηκε, τον αποθηκεύω σε ένα int Array στην πρώτη θέση και αυξάνω ένα μετρητή κατά δύο. Επομένως (θεωρητικά τουλάχιστον) όταν θα πατήσει το δεύτερο κουμπί αυτό θα μπει στην δεύτερη θέση του Array. Εε έστω ότι αν δώσω κουμπιά / αριθμούς που υπάρχουν στην ίδια γραμμή, δεν μου επιστρέφει 1 :P

Spoiler

    private void buttonActions(ActionEvent e) {
        if (e.getSource() instanceof JButton) {
            //String number = ((JButton) e.getSource()).getText();
            //Integer result = Integer.valueOf(number);
            int button = Arrays.asList(buttons).indexOf(e.getSource());
            getButtonsMatch(button);
        }
    }
    
    private void getButtonsMatch(int button) {
        int result = 0;
        
        counter++;
        buttonsArray[counter] = button;
        
        if (buttonsArray[0] >= 0 || buttonsArray[1] >= 0) {
            result = checkMatch(buttonsArray);
        }
        if (result == 1) {
            System.out.println("match!!");
        }
        if (result == 0) {
            System.out.println("Oh, the the icons don't match");
        }
    }
    
    private int checkMatch(int buttonsArray[]) {
        int check = -1;
        button1 = buttonsArray[0];
        button2 = buttonsArray[1];
        
        System.out.println(buttonsArray[0]);
        System.out.println(buttonsArray[1]);
        
        if (buttonsArray[0] > -1 && buttonsArray[1] > -1) {
            for (int i = 0; i < matchesCol; i++) {
                if (matches[i][0].equals(buttonsArray[0]) && matches[i][1].equals(buttonsArray[1]) || matches[i][0].equals(buttonsArray[1]) && matches[i][1].equals(buttonsArray[0])) {
                    check = 1;
                } else {
                    check = 0;
                }
            }
        }
        
        if (check == 1) {
            buttons[buttonsArray[0]].setEnabled(false);
            buttons[buttonsArray[1]].setEnabled(false);
            buttons[buttonsArray[0]].setBackground(Color.GRAY);
            buttons[buttonsArray[1]].setBackground(Color.GRAY);
            
            System.out.println("match");
            
            buttonsArray[0] = -1;
            buttonsArray[1] = -1;
            counter = -1;
        }
        
        if (check == 0) {
            buttons[buttonsArray[0]].setEnabled(true);
            buttons[buttonsArray[1]].setEnabled(true);
            buttonsArray[0] = -1;
            buttonsArray[1] = -1;
            counter = -1;
            System.out.println("dont match");
        }
        
        return check;
    }

 

 

Δημοσ.

Θες μία unordered δομή, η οποία να υποστηρίζει τον ‘equal’ operator. Μετά, θα έχεις αυτή την δομή σε έναν vector/array. 

Έχω καιρό να γράψω Java, αλλά νομίζω ότι πρέπει να έχει sets. Ο μόνος περιορισμός είναι ότι θα πρέπει όλοι οι αριθμοί να είναι διαφορετικοί. 

Εάν δεν σε βολεύει, φτιάξε μία subclass κάποιας δομής και υπερφόρτωσε τον equal operator να κάνει την δουλειά που θες. 

Δημοσ.

Μιας και επειδή προσπαθώ να μπαλώσω το παραπάνω αρκετή ώρα χωρίς αποτέλεσμα, είπα να το ξαναγράψω από την αρχή.

Υπάρχει κάτι αντίστοιχο του equals πχ για να τσεκάρω αν τα στοιχεία (δύο αριθμοί) ενός int array περιέχονται σε ένα άλλο array;
Δεν θέλω να τσεκάρει αν τα array είναι ίδια καθώς αν οι αριθμοί στα δύο array είναι σε διαφορετική θέση, θα μου επιστρέφει 0.

Εγώ θέλω πχ στο παρακάτω να μου επιστρέφει 1 και όχι 0.

int[] a = {1, 2, 3};
int[] b = {2, 1, 3};

Υπάρχει κάποιος τρόπος να γίνει αυτό;

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

Μιας και επειδή προσπαθώ να μπαλώσω το παραπάνω αρκετή ώρα χωρίς αποτέλεσμα, είπα να το ξαναγράψω από την αρχή.

Υπάρχει κάτι αντίστοιχο του equals πχ για να τσεκάρω αν τα στοιχεία (δύο αριθμοί) ενός int array περιέχονται σε ένα άλλο array;
Δεν θέλω να τσεκάρει αν τα array είναι ίδια καθώς αν οι αριθμοί στα δύο array είναι σε διαφορετική θέση, θα μου επιστρέφει 0.

Εγώ θέλω πχ στο παρακάτω να μου επιστρέφει 1 και όχι 0.

int[] a = {1, 2, 3};
int[] b = {2, 1, 3};

Υπάρχει κάποιος τρόπος να γίνει αυτό;

Αν δείς τα comments στο post που σου έβαλε ο @Kercyn θα δείς ότι κάποιος έχει ποστάρει πώς να υλοποιήσεις την δική σου equals

Παιχνιδάκι με matching εικόνες προσπαθείς να φτιάξεις ?

Επεξ/σία από tsofras
Δημοσ. (επεξεργασμένο)
7 λεπτά πριν, tsofras είπε

Αν δείς τα comments στο post που σου έβαλε ο @Kercyn θα δείς ότι κάποιος έχει ποστάρει πώς να υλοποιήσεις την δική σου equals

Παιχνιδάκι με matching εικόνες προσπαθείς να φτιάξεις ?

Χαχα, exactly.

Δοκίμασα το παρακάτω αλλά μου επιστρέφει συνέχεια false 🤔
Ακόμα και αν δώσω σωστό συνδυασμό με την σειρά που είναι στο array των συνδυασμών οι αριθμοί.

        for (int i = 0; i < SIZE / 2; i++) {
            System.out.println(Arrays.asList(matches[i]).containsAll(Arrays.asList(buttonsArray)));

        }

 

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

Χαχα, exactly.

Δοκίμασα το παρακάτω αλλά μου επιστρέφει συνέχεια false 🤔


        for (int i = 0; i < SIZE / 2; i++) {
            System.out.println(Arrays.asList(matches[i]).containsAll(Arrays.asList(buttonsArray)));

        }

Δεν θα σου αρέσει η πρόταση μου αλλά εγώ θα στην κάνω :D

Γιατί δεν φτιάχνεις τις εικόνες να είναι ουσιαστικά αντικείμενα , που θα έχουν και κάποιο id και μετά απλά να κοιτάς το equality σε σχέση με το id?

Θα είναι και καλύτερος ο κώδικας , θα δείς και το object oriented κομμάτι της γλώσσας ( και πολυμορφισμό ,κληρονομικότητα μαζί) 

Σίγουρα θα το κάνεις να δουλέψει και έτσι όπως το πας , αλλά θα σου βγουν μακαρόνια κώδικα χωρίς να έχεις χρησιμοποιήσει ουσιαστικά την object oriented φύση της γλώσσας. 

  • Like 1
Δημοσ.

Είχα σκεφτεί ένα ImagePanel και να προσθέτω τις εικόνες αλλά δεν είχα κάτι στο μυαλό μου για το πως θα το υλοποιήσω, αν και τώρα που το σκέφτομαι ο έλεγχος τους θα ήταν αρκετά πιο εύκολος σε σχέση με τα buttons.

Και τώρα στα κουμπιά χρησιμοποιώ custom class, άρα και εκεί μπορώ να προσθέσω ένα id που λες, αλλά που/πως θα ορίζω αν έχουν ίδιο id;
Προφανώς τα id θα είναι τα μισά το σύνολο των κουμπιών, σωστά; Αν κατάλαβα καλά τι εννοείς.

Δημοσ.

Κάτι ποιο απλό λέω εγώ , έχεις ένα αντικείμενο ας πούμε ImageIcon

Φτιάχνεις το ImageIconFish που έχει δηλωμένο ένα id= FISH

Φτιάχνεις το ImageIconDog που έχει δηλωμένο ένα id= DOG

κτλ

Μετά βάζεις στο table τα παραπάνω αντικείμενα σε 2αδες τυχαία και μετά τεστάρεις απλά αν τα id είναι ίδια

Πολύ μπακαλίστικη λογική που απλά την σκέφτηκα τώρα αλλά θα δουλέψει μια χαρά για αυτό που θέλεις.

Με το παραπάνω :

1) Μαθαίνεις να φτιάχνεις αντικείμενα

2) Θα χρησιμοποιήσεις κληρονομικότητα

3) Θα γίνει κομψός ο κώδικας σου

4) Φτιάχνεις καλές βάσεις για να εξελίξεις το παιχνίδι σου

5) Το κάνεις μετά και δυναμικό να δημιουργούνται αντικείμενα απο μία βάση για να έχεις άλλες πίστες κτλ.

Προφανώς και δεν κάνεις κάτι λάθος τώρα , και εγώ όταν ξεκίνησα έτσι έγραφα παιχνιδάκια ,αλλά όταν πήγα να δουλέψω είχα μείνει στα arrays και στις if. Μετά απο κάποια χρόνια εμπειρίας θα οσυ πρότεινα αν έχεις διάθεση να το φτιάξεις έτσι γιατί θα μάθεις πολύ περισσότερα πράγματα για την γλώσσα και τις έννοιες του αντικειμενοστραφή προγραμματισμού 

  • Like 1
Δημοσ. (επεξεργασμένο)
5 λεπτά πριν, marios28 είπε

Υπάρχει αντίστοιχο πρόσφατο θέμα εδώ: 

https://www.insomnia.gr/forums/topic/708176-πως-βάζω-εικόνες-σε-έναν-πίνακα-jbutton/

Γνωρίζω πως βάζω κουμπιά σε JButton. Έτσι το έχω υλοποιήσει τώρα μιας και μετέτρεψα άλλο παιχνίδι που είχα έτοιμο για να κερδίσω χρόνο γιατί πιέζει. Συνάδελφος πρέπει να είναι και το παιδί παραπάνω, παίζει να έχουμε και την ίδια άσκηση ή να είμαστε το ίδιο τμήμα :P

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

Η πρόταση του @tsofras είναι καλή. 

Μπορείς μετά να φτιάξεις την δική σου δομή, π.χ., SelectedImages όπου να έχει την μέθοδο ‘equal’. Μέσα σε αυτή την μέθοδο θα κάνεις αυτό που ψάχνεις χρησιμοποιώντας τα id των objects. 

Δημοσ.

Εύκολη αλλαγή, θα το κάνω έτσι και θα έχω μια ξεχωριστή κλάση για τα icons με ένα id.
Είχα ξεχωριστή κλάση για τα icons αλλά την έσβησα κατά λάθος και μετά άλλαξα και υλοποίηση γιατί ξενέρωσα, συν ότι δεν θυμόμουν πως την είχα 😅

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...