Page 1 of 1

vb.net

Posted: Fri Aug 14, 2015 1:52 pm
by Billy_Papageorge
Καλησπέρα σας! Χρησιμοποιώντας την παρακάτω εντολή, προσπαθώ να εκτυπώσω διαφόρων τύπων τιμές ταυτόχρονα.

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 η γραμμή που αναφέρω πιο πάνω.

Ξέρει κανείς που οφείλεται το λάθος?

Re: vb.net

Posted: Fri Aug 14, 2015 9:03 pm
by konapos
Λοιπόν, από ότι κατάλαβα το κύριο λάθος είναι ότι δεν χρησιμοποιείς σωστά την συνάρτηση 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)))
Ελπίζω να βοήθησα!

Re: vb.net

Posted: Sun Aug 16, 2015 12:31 pm
by Billy_Papageorge
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.