Προς το περιεχόμενο

Μετατροπή θερμοκρασιών - Visual C# 2008


Wise_One

Προτεινόμενες αναρτήσεις

Δημοσ.

Ρε παιδιά θα τρελαθώ. Μόλις που άρχισα να κάνω το απλούστερο 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: Δηλαδή στην περίπτωση των 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 = "";
       }
   }
}

Δημοσ.

Κατ' αρχάς θα σου προτείνω να βάζεις != null και όχι κενό String. Από εκεί και πέρα δεν ξέρω μήπως ενοχλεί η toString(). Δοκίμασε celsiusTextBox.Text = "" + celsius;

 

Edit: Να σου πω, μήπως έχεις μπερδέψει τα κουμπιά και αντί για το button2 πατάς το 3 και σου μηδενίζει τα πεδία;

Δημοσ.

Για το κενό String έχεις δίκιο, το ξέχασα απλά σε μια απ' τις προσπάθειες να δώ που ενοχλείται. Η toString() δεν έχει πρόβλημα, αν δε τη βάλω λέει ότι δε μπορεί να μετατρέψει τον αριθμό σε συμβολοσειρά.

 

Έχω κουμπί για μηδενισμό των πεδίων αλλά φυσικά και δεν τα μπερδεύω. Δεν καθαρίζονται τα πεδία, η τιμή που δίνω στο fahrTextBox υπάρχει και μετά το πάτημα του κουμπιού για τη μετατροπή.

 

Τέλος πάντων, θα το δοκιμάσω και το πρωί και βλέπουμε.

 

Τρελά πράγματα...

Δημοσ.
Κατ' αρχάς θα σου προτείνω να βάζεις != null

lol το string δε περνει null ,ως null μπορεις να βσλεις String.Empty

 

 

-----Προστέθηκε 21/11/2008 στις 09 : 21 : 04-----

 

 

((double)5 /(double)9) να η λυση σου

ή 5.0/9.0

 

1 ---> int

1.0 ---> double

Δημοσ.

Δεν νομίζω ότι αυτό είναι το πρόβλημα. Είσαι σίγουρος ότι το String δεν πέρνει null; το String είναι user-defined τύπος και άμα στην C# δεν πέρνει null κακώς δεν πέρνει.

 

Η toString() δεν έχει πρόβλημα, αν δε τη βάλω λέει ότι δε μπορεί να μετατρέψει τον αριθμό σε συμβολοσειρά.

 

Γι αυτό σου είπα βάλε ""+celsius; για να κάνει String Concatenation

 

PS: Έχει δίκιο ο Evgenios1, πρέπει να τα βάλεις double γιατί σου κάνει 5/9 = 0.

Δημοσ.

Δίκιο έχετε ρε παιδιά, τώρα το πρόσεξα. Μου έβγαζε λάθος και στη μετατροπή Κελσίου>Φαρενάιτ αλλά δε το κατάλαβα χθες. Δεν έκανε τον υπολογισμό 9/5 γι' αυτό το λόγο, και μου έβγαζε σφάλμα.

 

Θα το τσεκάρω αργότερα και θα σας πώ.

Δημοσ.

κειτα, περι του string στη C#, εαν κανεις το εξης:

string s=new string();

s=null;

bool isNull;

if(s!=null)

isNull=false;

else

isNull=true;

 

το αποτελεσμα(isNull) θα ειναι false

αρα δεν περνει null;

επεισης η string δεν ειναι struct αλλα class

Δημοσ.

Κι εγώ με Java ξεκίνησα στη σχολή, απλά τώρα στη C# έχει και "string" και "String", κατάλαβες; Στα tutorials που παρακολουθώ χρησιμοποιεί το "string"...

 

Πάντως εντάξει, με μια εισαγωγή 0 στους αριθμούς των εξισώσεων βγαίνει μια χαρά. Δουλεύει σωστότατα το πρόγραμμα τώρα.

Δημοσ.
κειτα, περι του 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%. Απλά στάθηκες άτυχος :-)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...