aristas Δημοσ. 14 Νοεμβρίου 2009 Δημοσ. 14 Νοεμβρίου 2009 Καλησπέρα παιδιά. Εχω ξεκινήσει μια εργασία σε Java που παίρνει σαν είσοδο ένα array και το συγκρίνει με ένα άλλο array για κοινά στοιχεία.Το δεύτερο array δημιουργείται τυχαία. Το παιχνίδι λέγεται hits-bullseyes. 1. Hit έχουμε όταν ταιριάζει οποιοδήποτε στοιχείο με το random array και 2. Bullseyes όταν το array που εισάγει ο παίκτης έχει στοιχεία στην ίδια θέση με αυτά του τυχαία παραγόμενου array. Έχω ολοκληρώσει το 2. με αυτο τον τρόπο > k=0; if(comArray[k]==playerArray[k] || comArray[k+1]==playerArray[k+1]|| comArray[k+2]==playerArray[k+2]) { System.out.println("there are bullseyes"); } else{ System.out.println("there are no bullseyes"); } Δεν γνωρίζω αν είναι ο πλεον ενδεδειγμένος τρόπος για αυτη τη δουλειά (ειμαι αρχάριος σε Java). Θα ήθελα να μου προτείνετε έναν τρόπο για να τελειώνω και το 1. που αφορά την αναζήτηση κοινών στοιχείων μεταξύ 2 arrays. Το linear search ειναι ενας απο αυτούς, διότι όπως γνωρίζω το binary search απαιτεί sorting πρώτα. Ευχαριστώ
virxen75 Δημοσ. 14 Νοεμβρίου 2009 Δημοσ. 14 Νοεμβρίου 2009 δεν το πολυ κατάλαβα έτσι μπερδεμένα που τα λες. δες αυτό που σου στέλνω και πες μου αν είναι αυτό που θες > public class BullsEyes{ public BullsEyes(){ String [] A={"a","b","c","d","e"}; String [] B={"a1","b1","c","d1","d"}; System.out.println("starting..."); boolean a=isThereDuplicates(A,; if(!a) System.out.println("no duplicates"); boolean b=isThereBullDuplicates(A,; if(! System.out.println("no bull duplicates"); } private boolean isThereDuplicates(String[] A,String []{ boolean duplicates=false; for (int i=0;i<A.length;i++) for (int j=0;j<B.length;j++) if (A[i].equals(B[j])){ System.out.println("found : A["+i+"]="+A[i]+" duplicate with B["+j+"]="+B[j]); duplicates=true; } return duplicates; } private boolean isThereBullDuplicates(String[] A,String []{ boolean bullDuplicates=false; for (int i=0;i<A.length;i++) for (int j=0;j<B.length;j++) if (A[i].equals(B[j]) && i==j){ System.out.println("found : A["+i+"]="+A[i]+" bull duplicate with B["+j+"]="+B[j]); bullDuplicates=true; } return bullDuplicates; } public static void main(String args[]){ new BullsEyes(); } }
aristas Δημοσ. 14 Νοεμβρίου 2009 Μέλος Δημοσ. 14 Νοεμβρίου 2009 Αυτό είναι φίλε ευχαριστώ , βέβαια θα υπάρχει παράθυρο JOptionPane που θα αναγράφει των αριθμό των επιτυχιών σε hit και bullseyes.
virxen75 Δημοσ. 14 Νοεμβρίου 2009 Δημοσ. 14 Νοεμβρίου 2009 τότε έτσι θα σε βοηθήσει περισσότερο να κάνεις αυτό που θες > public class BullsEyes{ public BullsEyes(){ String [] A={"a","b","c","d","e"}; String [] B={"a","b1","c","d1","d"}; System.out.println("starting..."); int a=isThereDuplicates(A,; System.out.println(""+a+" duplicates found"); System.out.println("======================"); int b=isThereBullDuplicates(A,; System.out.println(""+b+" bull duplicates found"); } private int isThereDuplicates(String[] A,String []{ int duplicates=0; for (int i=0;i<A.length;i++) for (int j=0;j<B.length;j++) if (A[i].equals(B[j])){ System.out.println("found : A["+i+"]="+A[i]+" duplicate with B["+j+"]="+B[j]); duplicates+=1; } return duplicates; } private int isThereBullDuplicates(String[] A,String []{ int bullDuplicates=0; for (int i=0;i<A.length;i++) for (int j=0;j<B.length;j++) if (A[i].equals(B[j]) && i==j){ System.out.println("found : A["+i+"]="+A[i]+" bull duplicate with B["+j+"]="+B[j]); bullDuplicates+=1; } return bullDuplicates; } public static void main(String args[]){ new BullsEyes(); } }
aristas Δημοσ. 15 Νοεμβρίου 2009 Μέλος Δημοσ. 15 Νοεμβρίου 2009 Το array που δημιουργείται τυχαία είναι int array και το δεύτερο που εισάγει ο παίκτης μετατρέπεται απο string σε array, είμαι εντάξει με αυτό, αλλα μόλις διαπίστωσα οτι το >if (A[i].equals(B[j]) && i==j){ System.out.println("found : A["+i+"]="+A[i]+" bull duplicate with B["+j+"]="+B[j]); bullDuplicates+=1; έχει πρόβλημα, πιθανόν να μην υπάρχει συμβατότητα.
Cue Δημοσ. 15 Νοεμβρίου 2009 Δημοσ. 15 Νοεμβρίου 2009 aristas, καταρχήν πρέπει να διαβάσεις λίγο περί Object Oriented programming πριν καν πιάσεις το πληκτρολόγιο να γράψεις Java. Για ξενόγλωσσα βιβλία ρίξε μια ματιά στο Thinking in Java το οποίο είναι δωρεάν. Δυστυχώς από Ελληνικά δεν γνωρίζω κάποιο. Σε γενικές γραμμές ο τρόπος για να λύσεις ένα οποιοδήποτε πρόβλημα είναι να σκεφτείς τι χρειάζεται από άποψη κλάσεων/αντικειμένων. Αν τα βάλεις στο χαρτί, είναι πιο εύκολο απ' ότι ακούγεται. Στο πρόβλημά σου, θέλεις να μπορείς να συγκρίνεις 2 array. Αμέσως αμέσως χρειάζεσαι μία κλάση να αντικατροπτίζει ένα array μιας και δεν μπορείς να κάνεις και πολλά με ένα "σκέτο" array. Το δεύτερο πράγμα που πρέπει να σκεφτείς είναι τι θες να κάνεις με αυτό το array. Από το πρόβλημα που θες να λύσεις, διακρίνονται 2 λειτουργίες. Hit και Bullseye. Σε τρίτο βαθμό, να βρεις τυχόν έξτρα λειτουργίες που χρειάζεσαι για να λύσεις το πρόβλημά σου. Από τα συμφραζόμενα καταλαβαίνεις ότι θες μία λειτουργία να συγκρίνει ένα στοιχείο σε μία συγκεκριμένη θέση και άλλη μία ανεξαρτήτως. Οπότε από τα παραπάνω έχεις μία κλάση ως εξής > package gr.insomnia.p3007850; /** * Αντιπροσωπεύει έναν πίνακα από στοιχεία τύπου T * * @param <T> */ public class CustomArray<T> { private T[] array; /** * @param array ο πίνακας με τα στοιχεία που αντιπροσωπεύει */ public CustomArray(T[] array) { super(); this.array = array; } /** * Ψάχνει να βρει το συγκεκριμένο αντικείμενο στο array ξεκινώντας από την αρχή * * και επιστρέφοντας στην πρώτη του εμφάνιση * * * @param element το αντικείμενο προς σύγκριση * @return επιστρέφει true αν βρεθεί το συγκεκριμένο αντικείμενο σε οποιαδήποτε θέση αλλιώς false */ boolean contains(T element) { for (T elementInArray : this.array) { if( elementInArray.equals(element) ) return true; } return false; } /** * Κοιτάει αν υπάρχει το συγκεκριμένο αντικείμενο στην συγκεκριμένη θέση * * @param element το αντικείμενο προς σύγκριση * @param index η επιθυμητή θέση του αντικειμένου * @return true αν υπάρχει το αντικείμενο στην συγκεκριμένη θέση αλλιώς false */ boolean contains(T element, int index) { return this.array[index].equals(element); } /** * Βρίσκει τον αριθμό των κοινών στοιχείων με το array. * * Στοιχεία που επαναλαμβάνονται θεωρούντε κοινά ανεξαιρέτως το αν υπάρχουν με ίδιο πλήθος * * @param array ο πίνακας προς σύγκριση * @return τον αριθμό των κοινών στοιχείων */ public int numberOfHits(T[] array) { int numberOfHits = 0; for (T element : array) { if(this.contains(element)){ numberOfHits++; } } return numberOfHits; } /** * Βρίσκει αν το array έχει τα ίδια ακριβώς στοιχεία στις ίδιες ακριβώς θέσεις * * @param array ο πίνακας προς σύγκριση * @return true αν ο ίδιος πίνακας αλλιώς false */ public boolean isBullsEye(T[] array) { for (int index = 0; index < array.length; index++) { T element = array[index]; if(!this.contains(element, index)){ return false; } } return true; } } και επειδή κώδικας χωρίς test είναι κώδικας που δεν δουλεύει > package gr.insomnia.p3007850; import junit.framework.Assert; import org.junit.Test; public class CustomArrayTest { private int numberOfHits(String[] originalArray, String[] arrayToCompare) { CustomArray<String> customArray = new CustomArray<String>( originalArray ); return customArray.numberOfHits( arrayToCompare ); } private boolean bullsEye(String[] originalArray, String[] arrayToCompare) { CustomArray<String> customArray = new CustomArray<String>( originalArray ); return customArray.isBullsEye( arrayToCompare ); } @Test public void testNumberOfHitsFull() { String[] originalArray = {"a","b","c","d","e"}; String[] arrayToCompare = {"a","b","c","d","e"}; int numberOfHits = numberOfHits(originalArray, arrayToCompare); Assert.assertEquals(5, numberOfHits); } @Test public void testNumberOfHitsPartial() { String[] originalArray = {"a","b","c","d","e"}; String[] arrayToCompare = {"a","b","c","D","E"}; int numberOfHits = numberOfHits(originalArray, arrayToCompare); Assert.assertEquals(3, numberOfHits); } @Test public void testNumberOfHitsDuplicate() { String[] originalArray = {"a","b","c","d","e"}; String[] arrayToCompare = {"a","a","a","a","a"}; int numberOfHits = numberOfHits(originalArray, arrayToCompare); Assert.assertEquals(5, numberOfHits); } @Test public void testNumberOfHitsNone() { String[] originalArray = {"a","b","c","d","e"}; String[] arrayToCompare = {"A","B","C","D","E"}; int numberOfHits = numberOfHits(originalArray, arrayToCompare); Assert.assertEquals(0, numberOfHits); } @Test public void testIsBullsEye() { String[] originalArray = {"a","b","c","d","e"}; String[] arrayToCompare = {"a","b","c","d","e"}; boolean bullsEye = bullsEye(originalArray, arrayToCompare); Assert.assertEquals(true, bullsEye); } @Test public void testIsBullsEyeNot() { String[] originalArray = {"a","b","c","d","e"}; String[] arrayToCompare = {"A","b","c","d","e"}; boolean bullsEye = bullsEye(originalArray, arrayToCompare); Assert.assertEquals(false, bullsEye); } }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.