Page 1 of 3

απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 6:43 pm
by vasmerk
Αιτιολογείστε τί θα συμβεί εάν προσπαθήσουμε να μεταγλωτίσουμε και να εκτελέσουμε τα
παρακάτω τμήματα κώδικα. Εάν θεωρείτε ότι υπάρχουν λάθη, διορθώστε τα (αφού εξηγήσετε
το λάθος) και εμφανίστε την έξοδο

Code: Select all

class Base {
int i;
Base () { add(2); }
void add(int v) { i+=v; }
void print() { System.out.println(i); }
}
class Extension extends Base {
Extension() { add(4); }
void add(int v) { i+=v*10; }
}
public class Q2_2Α {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8);
b.print();
}
}

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 6:55 pm
by necrofear_13
Το προγραμμα που εχεις στειλει το εκανα copy paste σε netbeans και μου εβγαλε ενα error κατα το run time οτι δεν υπαρχει h class Q2_2A.Απλα τουλαχιστον σε εμενα δουλεψε...το Α στο Q2_2A ηταν ελληνικο.Καταρχας ονομασε το αρχειο .java που θα φτιαξεις Q2_2A(το A αγγλικο) και στη συνεχεια γραψε μεσα τον ιδιο κωδικα(με προσοχη το Α στο Q2_2A να ειναι αγγλικο και οχι ελληνικο).Αυτα εμενα μου βγαζει 140 παντως το αποτελεσμα.
edit:Καλως ηρθες στο venus!!!

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 7:08 pm
by vasmerk
Σε ευχαριστώ πολύ ρε φίλε... με έσωσες... είχες δίκιο τελικά!!

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 7:10 pm
by necrofear_13
Τιποτα!!!Απλα διορθωσε τα greeklish επειδη απαγορευονται!!!! :smt023
Καλη συνεχεια!!!

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 9:00 pm
by vasmerk
γράφω ξανά δευτέρα και θα μου πέσει παρόμοιο θέμα...αν μπορεί κάποιος να το λύσει θα είμαι πολύ ευγνώμων

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 9:02 pm
by sandra
Δε θα σε βοηθούσε και πολύ να στο λύσει κάποιος. Ιδέα για τάξεις/αντικείμενα/κληρονομικότητα έχεις? Σου λέει πολύ απλά τι χρειάζεται η κάθε τάξη σου (όλα τα πεδία) και ποιος θα κληρονομεί ποιον. Για προσπάθησε να φτιάξεις αυτά και μετά να σε βοηθήσουμε.

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 9:06 pm
by vasmerk
αυτά τα ξέρω και τα έχω φτιάξει..δεν χρειάζεται να μου δείξει κάποιος αυτά.Η main με δυσκολεύει..εκεί θέλω κάποια βοήθεια...

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 9:09 pm
by The Punisher
Διόρθωσε τα post σου και μη γράφεις με greeklish! Δεν τα χρησιμοποιούμε στο forum ..

Re: απορία σε ένα πρόγραμμα Java

Posted: Sat Jun 27, 2009 9:12 pm
by vasmerk
σορυ παιδια δεν το ηξερα..καινουργιος είμαι..

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 2:04 pm
by cypher
Hello, μια ερωτηση προς οποιον/α ξερει. Με τι ειδους δομη μπορω να αποθηκευσω 600.000+ Strings στην java;
Με εναν απλο vector <String> φτανω μεχρι τα 509.932 αλλα μετα βγαζει
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at test.Main.main(Main.java:44)
Java Result: 1
Προφανως γεμισα το Heap space στην jvm. Υπαρχει τροπος να το αυξησω/επεκτεινω καπως; Θεμα μνημης υπολογιστη δεν παιζει. 4GB εχω και το συγκεκριμενο process μου φτανει top τα 180MB.

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 2:17 pm
by abujafar
cypher wrote:Hello, μια ερωτηση προς οποιον/α ξερει. Με τι ειδους δομη μπορω να αποθηκευσω 600.000+ Strings στην java;
Με εναν απλο vector <String> φτανω μεχρι τα 509.932 αλλα μετα βγαζει
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at test.Main.main(Main.java:44)
Java Result: 1
Προφανως γεμισα το Heap space στην jvm. Υπαρχει τροπος να το αυξησω/επεκτεινω καπως; Θεμα μνημης υπολογιστη δεν παιζει. 4GB εχω και το συγκεκριμενο process μου φτανει top τα 180MB.
Τι ide χρησιμοποιεις?Netbeans?

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 2:22 pm
by The Punisher
δοκίμασε να το τρέξεις με

Code: Select all

java -Xmx1.5g mypgrog

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 2:28 pm
by cypher
abujafar wrote:
Τι ide χρησιμοποιεις?Netbeans?
Υep
The Punisher wrote:δοκίμασε να το τρέξεις με

Code: Select all

java -Xmx1.5g mypgrog
Δοκιμασα και μου λεει invalid heap size... -Xmx1.5g
Eπρεπε να συμπληρωσω κατι στο αντιστοιχο πεδιο; :-p

Βασικα τωρα νομιζω αν δεν κανω λαθος το καταφερα με λιγο googling. Αντι για in.next() που εκανα για να διαβαζω το string και να το εκχωρω αμεσα στο vector εκανα in.next().intern() η οποια συναρτηση υποτιθεται ειναι της java και φροντιζει την οσο το δυνατον πιο optimal αποθηκευση των strings χρησιμοποιωντας το ιδιο αντικειμενο στην μνημη για οποιο string μπορει.

Προς το παρον γινεται ακομα το sorting. :-p :-p Αν πετυχει θα ενημερωσω.

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 2:35 pm
by The Punisher
για δοκίμασε -Xmx1g

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 2:36 pm
by abujafar
Υπαρχει ενα αρχειο που λεγεται netbeans.conf
Αμα το κανεις cat θα δεις οτι εκει γραφει για το Heap space καπου και μπορεις να το αυξησεις ή να το μειωσεις.
Δεν ειμαι σπιτι τωρα αμα δεν το εχεις βρει μεχρι να γυρισω θα σου πω ακριβως τι να αλλαξεις.
Πειραματισου :-D

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 3:03 pm
by Luke
Στο NetBeans πήγαινε Run --> Set Project Configuration --> Customize και από το παράθυρο που θα εμφανιστεί επέλεξε το Run από τα αριστερά. Εκεί μεταξύ άλλων μπορείς να ορίσεις και τα VM Options. Επίσης το ίδιο παράθυρο εμφανίζεται αν επιλέξεις Customize από το drop-down menu που βρίσκεται δίπλα στο σφυρί στα εικονίδια συντόμευσης.

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 3:29 pm
by cypher
Oκ πετυχε και το intern() και το -Xmx1g . Μια χαρα δουλευει. :-D Ευχαριστω πολυ. Τωρα αρκει να περιμενω μεχρι να γινουν n^2 πραξεις οπου n=600.000 . :-p Παλι καλα το χρειαζομαι μονο μια φορα.
Παω να φαω στο μεταξυ. :-p

Re: απορία σε ένα πρόγραμμα Java

Posted: Tue Jul 14, 2009 8:54 pm
by abujafar
Παντως επειδη γινεται και οπως το ειπα πριν και μηπως δει κανας αλλος το ποστ.
Επεξεργαζεσαι το αρχειο /etc/netbeans.conf . Και πειραζεις το argument που αναφερει -J-Xms32m (32 mb εννοει - το αυξανεις αυτο), αυτο για το initial heap size.
Επισης , μπορεις αμα δεν υπαρχει να προσθεσεις μια παραμετρο -J-Xmx256m που θετει το μεγιστο heap size. (Και παλι εννοειται βαζεις πιο πολυ απο 256 αν θες)

Αυτα.

Re: απορία σε ένα πρόγραμμα Java

Posted: Wed Jul 15, 2009 2:24 am
by para
Πού βρίσκω jdk profiles; Και ποιο φάκελο απ' όλους από αυτούς που θα κατέβουν επιλέγω όταν μου λέει να διαλέξω;

edit: problem solved.

Απορίες Java

Posted: Fri Jul 17, 2009 11:13 am
by Clouseau
1η Θέλω σε ένα αλφαριθμητικό να αποθηκεύω ενα χαρακτήρα και να τον συγκρίνω με τον επόμενο ή το αντίστροφο(αποθηκεύω χαρακτήρα και να συγκρίνω με τον προηγούμενο). To πρόβλημα είναι οτι με βγάζει εκτός ορίων του String γιατί είτε θα συγκρίνω τη θέση -1 ή μια θέση μετα το τέλος του String.
Η απορία αυτή μου δημιουργήθηκε οταν προσπάθησα να λύσω την δεύτερη περσινή εργασία που ζητάει να τυπώσουμε πόσα γράμματα έχει το String που μας δίνεται και κατόπιν να μετρήσουμε τα διπλά γράμματα.Επίσης να πω οτι τελείως πρόχειρα το διόρθωσα βάζοντας εναν "άκυρο" χαρακτήρα στην αρχή του string και ξεκινώντας το loop απ'το 1.

Code: Select all

while (i < str.length()) 
   	{
       if (Character.isLetter(str.charAt(i)))
                letters++;
    
    if(str.charAt(i-1)==str.charAt(i))
    dipla++;
    i++;
    }
2η Ζητάω απο τον χρήστη να πληκτρολογίσει εναν αριθμό τηλεφώνου και το αποθηκεύω σαν String. Χρησιμοποιώ την StringTokenizer για τους σκοπούς τις άσκησεις. Πως μπορώ να αποθηκέυσω το κάθε token ξεχωριστά εφόσον έτσι :

Code: Select all

while ( tokens.hasMoreTokens() )            
        System.out.println( tokens.nextToken() );
μου δίνει το επόμενο, με αποτέλεσμα οταν τελειώσει η επανάληψη να έχει αποθηκευμένο το τελευταίο;

3η Σε μια άσκηση (αν έχετε deitel,στην 29.5) μου ζητάει να φτιάξω 4 πίνακε string με όνοματα article, noun, verb και preposition, στον κάθε πίνακα δίνουμε manually 5 λέξεις και με τη βοήθεια της κλάσης Random τυπώνουμε τυχαία λέξεις με την σειρά πινάκων: article, noun, verb, preposition, article και noun. Το προβλημά μου είναι οτι εφόσον ξανατυπώνουμε τους article και noun έχουν τη ίδια τιμή με την πρώτη φορά που τους τυπώσαμε.

Είμαι σίγουρος είναι πολύ απλές οι απαντήσεις απλά (και κλασικά) δε τις βλέπω τώρα :)
Ευχαριστώ εκ των προτέρων!

Re: Απορίες Java

Posted: Fri Jul 17, 2009 11:46 am
by cypher
ddmichael wrote:1η Θέλω σε ένα αλφαριθμητικό να αποθηκεύω ενα χαρακτήρα και να τον συγκρίνω με τον επόμενο ή το αντίστροφο(αποθηκεύω χαρακτήρα και να συγκρίνω με τον προηγούμενο). To πρόβλημα είναι οτι με βγάζει εκτός ορίων του String γιατί είτε θα συγκρίνω τη θέση -1 ή μια θέση μετα το τέλος του String.
..........................
Είμαι σίγουρος είναι πολύ απλές οι απαντήσεις απλά (και κλασικά) δε τις βλέπω τώρα :)
Ευχαριστώ εκ των προτέρων!

Μια ευκολη λυση για να μην ξεκινας απο το 1 αλλα απο το 0 κανονικα ειναι να κρατησεις μια char μεταβλητη ονοματι prev και να βαζεις σε αυτην καθε φορα τον προηγουμενο χαρακτηρα. Ετσι θα συγκρινεις αν ειναι διπλο το γραμμα χωρις να ξεφευγεις απο τα ορια του string. Οποτε θα πηγαινε:

Code: Select all

int i=0; char prev = ''; // κενο στην αρχη
while (i < str.length())
      {
       if (Character.isLetter(str.charAt(i)))
                letters++;
   
    if(prev==str.charAt(i))
            dipla++;
     prev=str.charAt(i); // βαζεις την προηγουμενη τιμη ετσι ωστε στην επομενη επαναληψη να εχεις κατι για συγκριση.
    i++;
    }
2η δεν ειμαι σιγουρος αν εχω καταλαβει το τι ζητας αλλα νομιζω αυτο θα σου εδινε εναν πινακα με τα strings το καθενα ξεχωριστα οπως τα ζηταει η ασκηση:

Code: Select all

int i=0;
String [] Tokens = new String[30]; // βαζω μεγεθος 30 στον πινακα για να εχεις περιθωριο και να μην γεμισει γρηγορα
while ( tokens.hasMoreTokens() && i < 30) {        
         Tokens[i]= tokens.nextToken(); // το καθε string πλεον αποθηκευεται μεσα στον πινακα. 
        System.out.println( Tokens[i] );
       }


Στην 3η δεν ειμαι σιγουρος τι ζητας. Αν εχεις κωδικα ποσταρε τον.

υ.γ. μετακινησα το θεμα σου στην σωστη ενοτητα. :)

Re: απορία σε ένα πρόγραμμα Java

Posted: Fri Jul 17, 2009 12:35 pm
by Clouseau
Την πρώτη την τακτόποιήσαμε.
Η δεύτερη λύση(δε ξέρω αν εξακολουθώ και κάνω κάτι λάθος) αλλα δε μου δουλεύει,
πχ αυτό:

Code: Select all

System.out.println( Tokens[0] ); 
δε θα έπρεπε να μου τυπώνει το πρώτο token; (μου τυπώνει το δεύτερο)
Θέλω να μπορώ να χειριστώ κάθε token ξεχωριστά, όπως πχ να μπορώ να αντιστρέψω ενα string, δημιουργώντας tokens και τυπωνοντάς τα ανάποδα.

Το τρίτο είμαι σίγουρος έχει αστεία απάντηση,

Code: Select all

String[]article = { "the", "a", "one", "some", "any" };
String[] noun = { "boy", "girl", "dog", "town", "car" };
String[] verb = { "drove", "jumped", "ran", "walked", "skipped" };
String[]preposition = { "to", "from", "over", "under", "on" };

while(counter<20)
    {
    int i = random.nextInt(5);
    System.out.println(article[i]+" "+noun[i]+" "+verb[i]+" "+preposition[i]+" "+article[i]+" "+noun[i]);     
//θέλω να μου τα τυπώνει μ'αυτή τη σειρά,αλλά έτσι όπως τα έχω τη δεύτερη φορά που τυπώνω το article[i] ή το noun[i] το i έχει την ίδια τιμή με την πρώτη οπότε τυπώνω 2 φορές την ίδια λέξη στην κάθε πρόταση.
counter++;
    }
:)