Wise_One Δημοσ. 20 Νοεμβρίου 2008 Δημοσ. 20 Νοεμβρίου 2008 Ρε παιδιά θα τρελαθώ. Μόλις που άρχισα να κάνω το απλούστερο GUI πρόγραμμα του κόσμου, δε μου κάνει τη μετατροπή και δε μπορώ να καταλάβω γιατί! Έχω μία φόρμα με 2 textboxes όπου αντιστοιχούν στις θερμοκρασίες (κελσίου φαρενάιτ συγκεκριμένα) και δίπλα τους 2 κουμπιά όπου το καθένα κάνει τη μετατροπή στην άλλη μέτρηση. Δηλ, το "To Fahrenheit" κουμπί παίρνει την τιμή απ' το "celsiusTextBox" και τη μετατρέπει σε Φαρενάιτ αποθηκεύοντας την παραγώμενη τιμή στο άλλο textbox. Καταλάβατε φαντάζομαι τί κάνω. Να όμως που ο κώδικας(?!?!?) μου τη σπάει! Συγκεκριμένα κάνει τη μετατροπή από κελσίου σε Φαρενάιτ αλλά όχι το αντίθετο! Αν δώσω Φαρενάιτ και πατήσω "To Celsius", μου βγάζει "0" στο πεδίο για Κελσίου! Ο κώδικας που δουλεύει είναι: > if (celsiusTextBox.Text != "") { fahrTextBox.Text = (double.Parse(celsiusTextBox.Text) * (9 / 5) + 32).ToString(); } else { MessageBox.Show("Celsius value not given"); } Ενώ για τη μετατροπή από Φαρενάιτ σε Κελσίου: > if (fahrTextBox.Text != "") { double fahr; fahr = double.Parse(fahrTextBox.Text); double celsius; celsius = (fahr - 32) * (5 / 9); celsiusTextBox.Text = celsius.ToString(); } else { MessageBox.Show("Fahrenheit value not given"); } Βλέπω στον debugger ότι για κάποιο λόγο όταν γίνεται ο υπολογισμός της παράστασης, δεν ανατίθεται στην "celsius" και δε μπορώ να καταλάβω γιατί. Δοκίμασα να δώσω "0.0" όταν δημιουργώ τις μεταβλητές, δοκίμασα όλο τον κώδικα σε μια γραμμή (το έσπασα απλά και μόνο για να δώ γιατί δε λειτουργεί)... τίποτα. Πρέπει να είναι κάτι πολύ χαζό που μου διαφεύγει αλλά ρε παιδιά πραγματικά έχω κολλήσει.
Evgenios1 Δημοσ. 20 Νοεμβρίου 2008 Δημοσ. 20 Νοεμβρίου 2008 new double -----Προστέθηκε 20/11/2008 στις 10 : 57 : 57----- παντος αν τη βαλεις global ως private η public δε θα εχεις κανα προβ
GrandGamer Δημοσ. 21 Νοεμβρίου 2008 Δημοσ. 21 Νοεμβρίου 2008 είσαι σίγουρος ότι δεν παίζει; μήπως έχει κάνει αλλού λάθος και δεν εκτελείτε το if της δεύτερης μετατροπής;
Wise_One Δημοσ. 21 Νοεμβρίου 2008 Μέλος Δημοσ. 21 Νοεμβρίου 2008 @Evgenios1: Δηλαδή στην περίπτωση των double μεταβλητών πρέπει να τις δηλώνω ως αντικείμενα; Είναι δυνατόν κάτι τέτοιο; Μου φαίνεται πολύ παράξενο. Ακόμα είμαι με τα Absolute Beginner Lessons τoυ MSDN, δεν έχει πει τίποτα για global, private κλπ. @GrandGamer: Δε νομίζω ρε συ. Βλέπω το debugging και παίρνει κανονικά την τιμή που δίνω, απλά απ' ό,τι φαίνεται δε την αποθηκεύει. Ξέρω γώ... Με το που ανοίγω την εφαρμογή και δίνω τιμή στο FahrTextBox βγάζει λάθος, δεν είναι δηλαδή conflict κατά την εκτέλεση... Όλος ο κώδικας πάντως: > using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Temperature_Conversion { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (celsiusTextBox.Text != "") { fahrTextBox.Text = (double.Parse(celsiusTextBox.Text) * (9 / 5) + 32).ToString(); } else { MessageBox.Show("Celsius value not given"); } } private void button2_Click(object sender, EventArgs e) { if (fahrTextBox.Text != "") { double fahr; fahr = double.Parse(fahrTextBox.Text); double celsius; celsius = (fahr - 32) * (5 / 9); celsiusTextBox.Text = celsius.ToString(); } else { MessageBox.Show("Fahrenheit value not given"); } } private void button3_Click(object sender, EventArgs e) { celsiusTextBox.Text = ""; fahrTextBox.Text = ""; } } }
GrandGamer Δημοσ. 21 Νοεμβρίου 2008 Δημοσ. 21 Νοεμβρίου 2008 Κατ' αρχάς θα σου προτείνω να βάζεις != null και όχι κενό String. Από εκεί και πέρα δεν ξέρω μήπως ενοχλεί η toString(). Δοκίμασε celsiusTextBox.Text = "" + celsius; Edit: Να σου πω, μήπως έχεις μπερδέψει τα κουμπιά και αντί για το button2 πατάς το 3 και σου μηδενίζει τα πεδία;
Wise_One Δημοσ. 21 Νοεμβρίου 2008 Μέλος Δημοσ. 21 Νοεμβρίου 2008 Για το κενό String έχεις δίκιο, το ξέχασα απλά σε μια απ' τις προσπάθειες να δώ που ενοχλείται. Η toString() δεν έχει πρόβλημα, αν δε τη βάλω λέει ότι δε μπορεί να μετατρέψει τον αριθμό σε συμβολοσειρά. Έχω κουμπί για μηδενισμό των πεδίων αλλά φυσικά και δεν τα μπερδεύω. Δεν καθαρίζονται τα πεδία, η τιμή που δίνω στο fahrTextBox υπάρχει και μετά το πάτημα του κουμπιού για τη μετατροπή. Τέλος πάντων, θα το δοκιμάσω και το πρωί και βλέπουμε. Τρελά πράγματα...
Evgenios1 Δημοσ. 21 Νοεμβρίου 2008 Δημοσ. 21 Νοεμβρίου 2008 Κατ' αρχάς θα σου προτείνω να βάζεις != nulllol το string δε περνει null ,ως null μπορεις να βσλεις String.Empty -----Προστέθηκε 21/11/2008 στις 09 : 21 : 04----- ((double)5 /(double)9) να η λυση σου ή 5.0/9.0 1 ---> int 1.0 ---> double
GrandGamer Δημοσ. 21 Νοεμβρίου 2008 Δημοσ. 21 Νοεμβρίου 2008 Δεν νομίζω ότι αυτό είναι το πρόβλημα. Είσαι σίγουρος ότι το String δεν πέρνει null; το String είναι user-defined τύπος και άμα στην C# δεν πέρνει null κακώς δεν πέρνει. Η toString() δεν έχει πρόβλημα, αν δε τη βάλω λέει ότι δε μπορεί να μετατρέψει τον αριθμό σε συμβολοσειρά. Γι αυτό σου είπα βάλε ""+celsius; για να κάνει String Concatenation PS: Έχει δίκιο ο Evgenios1, πρέπει να τα βάλεις double γιατί σου κάνει 5/9 = 0.
Wise_One Δημοσ. 21 Νοεμβρίου 2008 Μέλος Δημοσ. 21 Νοεμβρίου 2008 Δίκιο έχετε ρε παιδιά, τώρα το πρόσεξα. Μου έβγαζε λάθος και στη μετατροπή Κελσίου>Φαρενάιτ αλλά δε το κατάλαβα χθες. Δεν έκανε τον υπολογισμό 9/5 γι' αυτό το λόγο, και μου έβγαζε σφάλμα. Θα το τσεκάρω αργότερα και θα σας πώ.
Evgenios1 Δημοσ. 21 Νοεμβρίου 2008 Δημοσ. 21 Νοεμβρίου 2008 κειτα, περι του string στη C#, εαν κανεις το εξης: string s=new string(); s=null; bool isNull; if(s!=null) isNull=false; else isNull=true; το αποτελεσμα(isNull) θα ειναι false αρα δεν περνει null; επεισης η string δεν ειναι struct αλλα class
GrandGamer Δημοσ. 21 Νοεμβρίου 2008 Δημοσ. 21 Νοεμβρίου 2008 Κοίτα εγώ είμαι παιδί της Java δεν ξέρω από C# αλλά μου φένεται περίεργο το string να είναι built-in τύπος.
Wise_One Δημοσ. 22 Νοεμβρίου 2008 Μέλος Δημοσ. 22 Νοεμβρίου 2008 Κι εγώ με Java ξεκίνησα στη σχολή, απλά τώρα στη C# έχει και "string" και "String", κατάλαβες; Στα tutorials που παρακολουθώ χρησιμοποιεί το "string"... Πάντως εντάξει, με μια εισαγωγή 0 στους αριθμούς των εξισώσεων βγαίνει μια χαρά. Δουλεύει σωστότατα το πρόγραμμα τώρα.
bilco Δημοσ. 23 Νοεμβρίου 2008 Δημοσ. 23 Νοεμβρίου 2008 κειτα, περι του string στη C#, εαν κανεις το εξης:string s=new string(); s=null; bool isNull; if(s!=null) isNull=false; else isNull=true; το αποτελεσμα(isNull) θα ειναι false αρα δεν περνει null; επεισης η string δεν ειναι struct αλλα class Ή θα παίρνει null ή δεν θα παίρνει. Πιθανότητα 50%. Απλά στάθηκες άτυχος
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.