vb.net

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
Billy_Papageorge
Kilobyte level
Kilobyte level
Posts: 202
Joined: Mon Oct 17, 2011 7:39 pm
Academic status: Alumnus/a
Gender:

vb.net

Postby Billy_Papageorge » Fri Aug 14, 2015 1:52 pm

Καλησπέρα σας! Χρησιμοποιώντας την παρακάτω εντολή, προσπαθώ να εκτυπώσω διαφόρων τύπων τιμές ταυτόχρονα.

Code: Select all

Console.Write(String.Format("Euclidean distance between " & printNum(num1) & " and " & printNum(num2) & " is {0:F2} ({1:F2}%) | Time: {2:D}ns" & ControlChars.Lf, euclidean, normEuclidean, Math.Truncate(euclideanTime.TotalMilliseconds)))


Ωστόσο αντιμετωπίζω κάποιο πρόβλημα exception μόλις πάει να τρέξει η εντολή εκτύπωσης.

- e {"Ο προσδιορισμός μορφής δεν ήταν έγκυρος."} System.Exception
+ System.FormatException {"Ο προσδιορισμός μορφής δεν ήταν έγκυρος."} System.FormatException
e.StackTrace " σε System.Number.FormatDouble(Double value, String format, NumberFormatInfo info) σε System.Double.ToString(String format, IFormatProvider provider) σε System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) σε System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) σε System.String.Format(String format, Object arg0, Object arg1, Object arg2) σε ConsoleApplication1.Module1.Main(String[] args) στο C:\Users\Billy\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\Module1.vb:γραμμή 112" String

όπου γραμμή 112 η γραμμή που αναφέρω πιο πάνω.

Ξέρει κανείς που οφείλεται το λάθος?
Last edited by Alive on Fri Aug 14, 2015 10:26 pm, edited 1 time in total.
Reason: Add code tags
konapos
byte level
byte level
Posts: 129
Joined: Sun Oct 23, 2011 7:46 pm
Academic status: 4th year
Gender:

Re: vb.net

Postby konapos » Fri Aug 14, 2015 9:03 pm

Λοιπόν, από ότι κατάλαβα το κύριο λάθος είναι ότι δεν χρησιμοποιείς σωστά την συνάρτηση String Format.
Αυτό φαίνεται από αυτή τη γραμμη:

Code: Select all

System.String.Format(String format, Object arg0, Object arg1, Object arg2) σε ConsoleApplication1.Module1.Main(String[] args)

Εσύ χρησιμοποιείς λάθος τις παραμέτρους.
Επιπλέον το {} πρέπει να είναι μέσα στο string και παίρνει έναν αριθμό. Ο αριθμός δηλώνει ποια παράμετρο θες μετά το κόμμα. Το {0} σημάινει ότι θα πάρεις την πρώτη παράμετρο...το {1} θα πάρει την δεύτερη παράμετρο κ.λ.π.

Ένα παράδειγμα για να το καταλάβεις
Έστω ότι θέλω να εκτελέσω την πράξη 2 + 6 και θέλω να εκτυπώσω το αποτέλεσμα...
a = 2
b = 6
c = 6+2

Code: Select all

Console.Writeline(String.Format("The sum of {0} and {1} is {2}", a, b, c);

Άρα το {0} παίρνει την τιμή το a
το {1} την τιμή του b
και το {2} την τιμή του c

Αν κατάλαβες περίπου πως λειτουργεί...τώρα πρέπει να διορθώσεις την γραμμη που εκτυπώνεις τα αποτελέσματα..
1) Έχεις μια μέθοδο printNum(num) το printNum ειναι void?? String?? Integer?? Double?? αν θες να δουλέψει πρέπει να είναι String
2) βάζεις κάτι άκυρες αγκύλες {0:F2} που είναι για ακρίβεια με δύο δεκαδικά ψηφία...αυτό πρέπει να μπει ΜΕΣΑ στο string

Άρα η γραμμή σου πρέπει να μοιάζει κάπως έτσι:

Code: Select all

Console.Write(String.Format("Euclidean distance between {0:F2} and {1:F2} is {2:F2} and the norm euclidean is {3:F2} and it took {4:D} ns",num1, num2, euclidean, normEuclidean, Math.Truncate(euclideanTime.TotalMilliseconds)))


Ελπίζω να βοήθησα!
Last edited by Alive on Fri Aug 14, 2015 10:27 pm, edited 1 time in total.
Reason: Add code tags
Όταν ο θεός έβρεχε μυαλά εγώ πήρα και αυτουνού που κρατούσε ομπρέλα!
User avatar
Billy_Papageorge
Kilobyte level
Kilobyte level
Posts: 202
Joined: Mon Oct 17, 2011 7:39 pm
Academic status: Alumnus/a
Gender:

Re: vb.net

Postby Billy_Papageorge » Sun Aug 16, 2015 12:31 pm

konapos wrote:Λοιπόν, από ότι κατάλαβα το κύριο λάθος είναι ότι δεν χρησιμοποιείς σωστά την συνάρτηση String Format.
Αυτό φαίνεται από αυτή τη γραμμη:

Code: Select all

System.String.Format(String format, Object arg0, Object arg1, Object arg2) σε ConsoleApplication1.Module1.Main(String[] args)

Εσύ χρησιμοποιείς λάθος τις παραμέτρους.
Επιπλέον το {} πρέπει να είναι μέσα στο string και παίρνει έναν αριθμό. Ο αριθμός δηλώνει ποια παράμετρο θες μετά το κόμμα. Το {0} σημάινει ότι θα πάρεις την πρώτη παράμετρο...το {1} θα πάρει την δεύτερη παράμετρο κ.λ.π.

Ένα παράδειγμα για να το καταλάβεις
Έστω ότι θέλω να εκτελέσω την πράξη 2 + 6 και θέλω να εκτυπώσω το αποτέλεσμα...
a = 2
b = 6
c = 6+2

Code: Select all

Console.Writeline(String.Format("The sum of {0} and {1} is {2}", a, b, c);

Άρα το {0} παίρνει την τιμή το a
το {1} την τιμή του b
και το {2} την τιμή του c

Αν κατάλαβες περίπου πως λειτουργεί...τώρα πρέπει να διορθώσεις την γραμμη που εκτυπώνεις τα αποτελέσματα..
1) Έχεις μια μέθοδο printNum(num) το printNum ειναι void?? String?? Integer?? Double?? αν θες να δουλέψει πρέπει να είναι String
2) βάζεις κάτι άκυρες αγκύλες {0:F2} που είναι για ακρίβεια με δύο δεκαδικά ψηφία...αυτό πρέπει να μπει ΜΕΣΑ στο string

Άρα η γραμμή σου πρέπει να μοιάζει κάπως έτσι:

Code: Select all

Console.Write(String.Format("Euclidean distance between {0:F2} and {1:F2} is {2:F2} and the norm euclidean is {3:F2} and it took {4:D} ns",num1, num2, euclidean, normEuclidean, Math.Truncate(euclideanTime.TotalMilliseconds)))


Ελπίζω να βοήθησα!


Ναι! Σ'ευχαριστώ πολύ .. Μάλλον το λάθος πρέπει να είναι στην εμφάνιση Timespan τιμών γιατί εξακολουθεί να πετάει exception.
You do not have the required permissions to view the files attached to this post.

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

Who is online

Users browsing this forum: No registered users and 0 guests