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

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
vasmerk
bit level
bit level
Posts: 10
Joined: Sat Jun 27, 2009 6:35 pm
Academic status: N>4
Gender:

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

Post by vasmerk » Sat Jun 27, 2009 6:43 pm

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

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();
}
}
Last edited by Bloody Mary on Sat Jun 27, 2009 7:27 pm, edited 1 time in total.
Reason: quote added
User avatar
necrofear_13
Wow! Terabyte level
Wow! Terabyte level
Posts: 2141
Joined: Sun Nov 18, 2007 5:32 am
Academic status: Alumnus/a
Gender:
Location: ΗΡΑΚΛΕΙΟ ΑΤΤΙΚΗΣ

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

Post by necrofear_13 » Sat Jun 27, 2009 6:55 pm

Το προγραμμα που εχεις στειλει το εκανα copy paste σε netbeans και μου εβγαλε ενα error κατα το run time οτι δεν υπαρχει h class Q2_2A.Απλα τουλαχιστον σε εμενα δουλεψε...το Α στο Q2_2A ηταν ελληνικο.Καταρχας ονομασε το αρχειο .java που θα φτιαξεις Q2_2A(το A αγγλικο) και στη συνεχεια γραψε μεσα τον ιδιο κωδικα(με προσοχη το Α στο Q2_2A να ειναι αγγλικο και οχι ελληνικο).Αυτα εμενα μου βγαζει 140 παντως το αποτελεσμα.
edit:Καλως ηρθες στο venus!!!
No matter what kind of sadness envelops the darkness of our despair, if you put one foot in front of the other, at some point you will reach a place where you can see the light.

In heaven or earth, no matter to where we progress, no matter where we walk, that becomes our road.
As long as we keep walking the battle will continue.
And that is exactly why this place will always be a paradise
vasmerk
bit level
bit level
Posts: 10
Joined: Sat Jun 27, 2009 6:35 pm
Academic status: N>4
Gender:

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

Post by vasmerk » Sat Jun 27, 2009 7:08 pm

Σε ευχαριστώ πολύ ρε φίλε... με έσωσες... είχες δίκιο τελικά!!
Last edited by Bloody Mary on Sat Jun 27, 2009 7:28 pm, edited 1 time in total.
Reason: greeklish removed
User avatar
necrofear_13
Wow! Terabyte level
Wow! Terabyte level
Posts: 2141
Joined: Sun Nov 18, 2007 5:32 am
Academic status: Alumnus/a
Gender:
Location: ΗΡΑΚΛΕΙΟ ΑΤΤΙΚΗΣ

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

Post by necrofear_13 » Sat Jun 27, 2009 7:10 pm

Τιποτα!!!Απλα διορθωσε τα greeklish επειδη απαγορευονται!!!! :smt023
Καλη συνεχεια!!!
No matter what kind of sadness envelops the darkness of our despair, if you put one foot in front of the other, at some point you will reach a place where you can see the light.

In heaven or earth, no matter to where we progress, no matter where we walk, that becomes our road.
As long as we keep walking the battle will continue.
And that is exactly why this place will always be a paradise
vasmerk
bit level
bit level
Posts: 10
Joined: Sat Jun 27, 2009 6:35 pm
Academic status: N>4
Gender:

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

Post by vasmerk » Sat Jun 27, 2009 9:00 pm

γράφω ξανά δευτέρα και θα μου πέσει παρόμοιο θέμα...αν μπορεί κάποιος να το λύσει θα είμαι πολύ ευγνώμων
You do not have the required permissions to view the files attached to this post.
Last edited by Zifnab on Mon Jun 29, 2009 1:51 pm, edited 1 time in total.
Reason: removed greeklish
User avatar
sandra
Wow! Terabyte level
Wow! Terabyte level
Posts: 4917
Joined: Mon Oct 02, 2006 11:37 am
Academic status: Alumnus/a
Gender:
Location: στη φωλιά μου κοιτώντας ένα χωράφι με στάρι...

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

Post by sandra » Sat Jun 27, 2009 9:02 pm

Δε θα σε βοηθούσε και πολύ να στο λύσει κάποιος. Ιδέα για τάξεις/αντικείμενα/κληρονομικότητα έχεις? Σου λέει πολύ απλά τι χρειάζεται η κάθε τάξη σου (όλα τα πεδία) και ποιος θα κληρονομεί ποιον. Για προσπάθησε να φτιάξεις αυτά και μετά να σε βοηθήσουμε.
Από εδώ κι εμπρός θα είσαι για πάντα υπεύθυνος για εκείνο που έχεις ημερώσει.
Είσαι υπεύθυνος για το τριαντάφυλλο σου...
vasmerk
bit level
bit level
Posts: 10
Joined: Sat Jun 27, 2009 6:35 pm
Academic status: N>4
Gender:

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

Post by vasmerk » Sat Jun 27, 2009 9:06 pm

αυτά τα ξέρω και τα έχω φτιάξει..δεν χρειάζεται να μου δείξει κάποιος αυτά.Η main με δυσκολεύει..εκεί θέλω κάποια βοήθεια...
Last edited by Zifnab on Mon Jun 29, 2009 1:53 pm, edited 1 time in total.
Reason: greeklish removed
The Punisher
Venus Former Team Member
Posts: 7561
Joined: Thu Oct 27, 2005 1:43 pm
Academic status: Alumnus/a
Gender:
Location: Boston, MA

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

Post by The Punisher » Sat Jun 27, 2009 9:09 pm

Διόρθωσε τα post σου και μη γράφεις με greeklish! Δεν τα χρησιμοποιούμε στο forum ..
vasmerk
bit level
bit level
Posts: 10
Joined: Sat Jun 27, 2009 6:35 pm
Academic status: N>4
Gender:

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

Post by vasmerk » Sat Jun 27, 2009 9:12 pm

σορυ παιδια δεν το ηξερα..καινουργιος είμαι..
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

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

Post by cypher » Tue Jul 14, 2009 2:04 pm

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.
ImageImageImageImageImageImageImage
User avatar
abujafar
Mbyte level
Mbyte level
Posts: 651
Joined: Wed Dec 03, 2008 2:49 am
Academic status: Alumnus/a
Gender:
Location: Marmaras

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

Post by abujafar » Tue Jul 14, 2009 2:17 pm

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?
The Punisher
Venus Former Team Member
Posts: 7561
Joined: Thu Oct 27, 2005 1:43 pm
Academic status: Alumnus/a
Gender:
Location: Boston, MA

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

Post by The Punisher » Tue Jul 14, 2009 2:22 pm

δοκίμασε να το τρέξεις με

Code: Select all

java -Xmx1.5g mypgrog
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

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

Post by cypher » Tue Jul 14, 2009 2:28 pm

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 Αν πετυχει θα ενημερωσω.
ImageImageImageImageImageImageImage
The Punisher
Venus Former Team Member
Posts: 7561
Joined: Thu Oct 27, 2005 1:43 pm
Academic status: Alumnus/a
Gender:
Location: Boston, MA

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

Post by The Punisher » Tue Jul 14, 2009 2:35 pm

για δοκίμασε -Xmx1g
User avatar
abujafar
Mbyte level
Mbyte level
Posts: 651
Joined: Wed Dec 03, 2008 2:49 am
Academic status: Alumnus/a
Gender:
Location: Marmaras

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

Post by abujafar » Tue Jul 14, 2009 2:36 pm

Υπαρχει ενα αρχειο που λεγεται netbeans.conf
Αμα το κανεις cat θα δεις οτι εκει γραφει για το Heap space καπου και μπορεις να το αυξησεις ή να το μειωσεις.
Δεν ειμαι σπιτι τωρα αμα δεν το εχεις βρει μεχρι να γυρισω θα σου πω ακριβως τι να αλλαξεις.
Πειραματισου :-D
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

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

Post by Luke » Tue Jul 14, 2009 3:03 pm

Στο NetBeans πήγαινε Run --> Set Project Configuration --> Customize και από το παράθυρο που θα εμφανιστεί επέλεξε το Run από τα αριστερά. Εκεί μεταξύ άλλων μπορείς να ορίσεις και τα VM Options. Επίσης το ίδιο παράθυρο εμφανίζεται αν επιλέξεις Customize από το drop-down menu που βρίσκεται δίπλα στο σφυρί στα εικονίδια συντόμευσης.
Είμαι ένας μοναχικός cowboy...
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

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

Post by cypher » Tue Jul 14, 2009 3:29 pm

Oκ πετυχε και το intern() και το -Xmx1g . Μια χαρα δουλευει. :-D Ευχαριστω πολυ. Τωρα αρκει να περιμενω μεχρι να γινουν n^2 πραξεις οπου n=600.000 . :-p Παλι καλα το χρειαζομαι μονο μια φορα.
Παω να φαω στο μεταξυ. :-p
ImageImageImageImageImageImageImage
User avatar
abujafar
Mbyte level
Mbyte level
Posts: 651
Joined: Wed Dec 03, 2008 2:49 am
Academic status: Alumnus/a
Gender:
Location: Marmaras

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

Post by abujafar » Tue Jul 14, 2009 8:54 pm

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

Αυτα.
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

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

Post by para » Wed Jul 15, 2009 2:24 am

Πού βρίσκω jdk profiles; Και ποιο φάκελο απ' όλους από αυτούς που θα κατέβουν επιλέγω όταν μου λέει να διαλέξω;

edit: problem solved.
Last edited by para on Fri Jul 17, 2009 12:17 pm, edited 1 time in total.
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...
#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
Clouseau
Kilobyte level
Kilobyte level
Posts: 272
Joined: Mon May 11, 2009 2:18 pm
Academic status: Alumnus/a
Gender:

Απορίες Java

Post by Clouseau » Fri Jul 17, 2009 11:13 am

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 έχουν τη ίδια τιμή με την πρώτη φορά που τους τυπώσαμε.

Είμαι σίγουρος είναι πολύ απλές οι απαντήσεις απλά (και κλασικά) δε τις βλέπω τώρα :)
Ευχαριστώ εκ των προτέρων!
Exceptions, gotta catch 'em all!
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες Java

Post by cypher » Fri Jul 17, 2009 11:46 am

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η δεν ειμαι σιγουρος τι ζητας. Αν εχεις κωδικα ποσταρε τον.

υ.γ. μετακινησα το θεμα σου στην σωστη ενοτητα. :)
ImageImageImageImageImageImageImage
User avatar
Clouseau
Kilobyte level
Kilobyte level
Posts: 272
Joined: Mon May 11, 2009 2:18 pm
Academic status: Alumnus/a
Gender:

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

Post by Clouseau » Fri Jul 17, 2009 12:35 pm

Την πρώτη την τακτόποιήσαμε.
Η δεύτερη λύση(δε ξέρω αν εξακολουθώ και κάνω κάτι λάθος) αλλα δε μου δουλεύει,
πχ αυτό:

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++;
    }
:)
Exceptions, gotta catch 'em all!
Post Reply

Return to “Προγραμματισμός”