Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Die Problemzone Spinnt der Rechner mal wieder? Stellt eure Fragen hier und es wird geholfen.

try und catch

Diskussion: try und catch im Forum Die Problemzone, in der Kategorie PC Foren; Anzeige hi bin ein ziemlicher Anfänger in Sachen programmieren und ich soll für meine Arbeit ein Prog schreiben wobei ich ...

Antwort
Alt 09.09.08, 10:02   #1 (permalink)
 
Registriert seit: 09.09.08
Schnauf Leistung: Facit NTK
Likes: 0
Smile try und catch

Anzeige

hi
bin ein ziemlicher Anfänger in Sachen programmieren und ich soll für meine Arbeit ein Prog schreiben wobei ich die try und catch attribute benötige.

In galileo open book c# benutzen sie dabei die variable "e" aber bei mir geht das nicht.
Kann mir da vielleicht jemand helfen??

hier mein bisheriges Ergebnis:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
double p1x, p2x, p1y, p2y, m, b;
string stm, stb;

p1x = Convert.ToDouble(textBox1.Text);
p1y = Convert.ToDouble(textBox2.Text);
p2x = Convert.ToDouble(textBox3.Text);
p2y = Convert.ToDouble(textBox4.Text);

m = p2y - p1y / p2x - p1x;
b = p2y - m * p2x;

stm = Convert.ToString(m);
stb = Convert.ToString(b);

//hier auf Ausnahmen achten
try
{
p1x = p2x;
}

//Ausnahmen die im try Block autreten werden hierher übermittelt
catch(Exception )
{

MessageBox.Show("x1 darf nicht gleich x2 sein",
"Achtung",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}

textBox5.Text = string.Format("f(x)=" + stm + "*x" + stb);


}
}
}

danke schonmal im vorraus

Mit freundlichen Grüßen Schnauf

Schnauf ist offline   Mit Zitat antworten
Alt 09.09.08, 11:15   #2 (permalink)
 
Registriert seit: 14.06.07
Machine Leistung: Facit NTK
Machine eine Nachricht über ICQ schicken
Likes: 0
Standard

Bitte benutz das nächste mal Code-Tags, so hier:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			double p1x, p2x, p1y, p2y, m, b;
			string stm, stb;

			p1x = Convert.ToDouble(textBox1.Text);
			p1y = Convert.ToDouble(textBox2.Text);
			p2x = Convert.ToDouble(textBox3.Text);
			p2y = Convert.ToDouble(textBox4.Text);

			m = p2y - p1y / p2x - p1x;
			b = p2y - m * p2x;

			stm = Convert.ToString(m);
			stb = Convert.ToString(b);

			//hier auf Ausnahmen achten
			try
			{
				p1x = p2x;
			}
			//Ausnahmen die im try Block autreten werden hierher übermittelt
			catch(Exception )
			{

				MessageBox.Show("x1 darf nicht gleich x2 sein",	"Achtung",
				MessageBoxButtons.OK,
				MessageBoxIcon.Warning);
			}

			textBox5.Text = string.Format("f(x)=" + stm + "*x" + stb);
		}
	}
}
So, wie du es geschrieben hast, kann es nicht funktionieren.
Bei einem einfachen Vergleich (p1x = p2x wird keine Exception geworfen. Du solltest dir nochmal genau durchlesen, was das ist und wie es funktioniert.

Für diesen einfachen Vergleich brauchst du diese nicht, da würde ich es so machen:
Code:
if(p1x == p2x)
{
	MessageBox.Show("x1 darf nicht gleich x2 sein",	"Achtung",
	MessageBoxButtons.OK,
	MessageBoxIcon.Warning);
}
Machine ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 09.09.08, 12:11   #3 (permalink)
Boardfotograf
 
Registriert seit: 21.12.07
GambaJo Leistung: Z3
Likes: 63
Standard RE: try und catch

M4CH!N3 hat recht. Dabei wird keine Exception geworfen.

Zitat:
Original von Schnauf
In galileo open book c# benutzen sie dabei die variable "e" aber bei mir geht das nicht.
Mit "Geht nicht" kann man nicht viel anfangen. Mehr Info!



Code:
catch(Exception e)
{
   MessageBox.Show("Fehler " + e.Message,
   "Achtung",
   MessageBoxButtons.OK,
   MessageBoxIcon.Warning);
}
Einfaches Beispiel für eine Exception wäre eine Division durch 0.
GambaJo ist offline   Mit Zitat antworten
Alt 09.09.08, 12:36   #4 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

Ich schließe mich hier mal meinen Vorrednern an.
Wenn du unbedingt try catch in deinem Beispiel verwenden willst dann pack die Zeile m = p2y - p1y / p2x - p1x; in den Block, also etwa so:

Code:
...
p1x = Convert.ToDouble(textBox1.Text);
p1y = Convert.ToDouble(textBox2.Text);
p2x = Convert.ToDouble(textBox3.Text);
p2y = Convert.ToDouble(textBox4.Text);

try{  // Division durch 0 abfangen
     m = p2y - p1y / p2x - p1x;
}
catch(Exception e)
{
   MessageBox.Show("Fehler " + e.Message,
   "Achtung",
   MessageBoxButtons.OK,
   MessageBoxIcon.Warning);
}

b = p2y - m * p2x;

stm = Convert.ToString(m);
stb = Convert.ToString(b);
...
Das Beispiel behandelt jetzt aber nicht den Fall, was mit m ist, wenn die Exception geworfen wurde. stm = ... könnte hier also auch noch kritisch werden
lightsaver ist offline   Mit Zitat antworten
Alt 09.09.08, 12:44   #5 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 19
Standard

Ich wollt eigentlich net klugscheißern, aber nachdem schon 2 Leute den Fehler machen: Spezielle Exceptions verwenden, in dem Fall die DivideByZeroException.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Alt 09.09.08, 13:16   #6 (permalink)
Themenstarter
 
Registriert seit: 09.09.08
Schnauf Leistung: Facit NTK
Likes: 0
Standard

@ M4CH!N3

kannst du mir dann vlt auch noch einen "else" code dafür geben??
das programm dient einer geradengleichung
und wenn x1 =x2 ist darf kein Ergebnis herrauskommen
Schnauf ist offline   Mit Zitat antworten
Alt 09.09.08, 13:17   #7 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

Zitat:
Original von t3rr0r.bYt3
Ich wollt eigentlich net klugscheißern, aber nachdem schon 2 Leute den Fehler machen: Spezielle Exceptions verwenden, in dem Fall die DivideByZeroException.
Da gebe ich dir natürlich Recht, aber ich war mir jetzt auf die Schnelle nicht sicher, ob man hier nicht auch noch eine OverflowException provozieren kann, denke aber mal ja. Um das nun zum Erklären nicht zu kompliziert zu machen, bin ich halt bei der einfachen Exception geblieben, zumal diese ja auch funktioniert
lightsaver ist offline   Mit Zitat antworten
Alt 09.09.08, 13:19   #8 (permalink)
Themenstarter
 
Registriert seit: 09.09.08
Schnauf Leistung: Facit NTK
Likes: 0
Standard

ja sie hätte funktioniert aber war für mich in dem sinne nicht relevant
M4CH!N3´s Lösung war die die ich gebraucht habe

EDIT: hat sich erledigt habs rausgefunden. Ich stells mal rein

Code:
using System;
using System.Collections.Generic; 
using System.ComponentModel;
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms;  

namespace WindowsApplication1 
{
          public partial class Form1 : Form
       {         public Form1()
           {             InitializeComponent();

            }          private void button1_Click(object sender, EventArgs e)         {                          
              try
             {  
                                double p1x, p2x, p1y, p2y, m, b;
                                 string stm, stb;                 
                            
                 p1x = Convert.ToDouble(textBox1.Text);
                 p1y = Convert.ToDouble(textBox2.Text);
                 p2x = Convert.ToDouble(textBox3.Text);
                 p2y = Convert.ToDouble(textBox4.Text);

                 if (p1x == p2x)
                 {                    
                  MessageBox.Show("x1 darf nicht gleich x2 sein", Achtung",  MessageBoxButtons.OK,  MessageBoxIcon.Warning);
                 }

                 else
                 {

                 m = p2y - p1y / p2x - p1x;
                 b = p2y - m * p2x;
                
                 stm = Convert.ToString(m);
                 stb = Convert.ToString(b);

                 textBox5.Text = string.Format("f(x)=" + stm + "*x" + stb);
                 }
          }
               catch
         {
              MessageBox.Show("Kovertierungfehler", "Achtung", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
       }
     }
 }

danke nochmal an alle die mir helfen wollten und geholfen haben
Schnauf ist offline   Mit Zitat antworten
Alt 09.09.08, 16:53   #9 (permalink)
Boardfotograf
 
Registriert seit: 21.12.07
GambaJo Leistung: Z3
Likes: 63
Standard

So richtig schön ist das aber nicht, wenn Du mit try-catch ohne Exception arbeitest. Theoretisch kann der Spring in den catch-Block verschiedene Ursachen haben, und die kriegst Du über die Exception raus.
Im Moment gibst Du pauschal die Meldung "Kovertierungfehler" aus, egal welche Ursache der Fehler hatte.
Angenommen der Fehler entsteht nicht beim Konvertieren, sondern z.B. beim Auslesen der Textboxen. Du wirst trotzdem die Meldung "Kovertierungfehler" bekommen. Verwirrend für den Anwender.
GambaJo ist offline   Mit Zitat antworten
Alt 09.09.08, 18:02   #10 (permalink)
 
Registriert seit: 16.05.08
Binäru$ Leistung: Facit NTK
Likes: 0
Standard

Hi,

Sry für die OT, aber ich habe eine kleine Frage die mich schon ewigst beschäftigt.
Warum werden des öfteren mehrere derived Exceptions implementiert um diverse Fehler abzufangen, anstatt einfach die Baseclass Exception zu verwenden?
Des öfteren macht es für mich durchaus Sinn. Zb wenn man eine outofrange Exception anders behandeln will, als eine dividebyzero Exception.

Ich nehm mal ein Beispiel aus nen OpenBook her, bei welchem ich die Baseclass Exception bevorzugen würde:
Code:
  try {  
    obj.GetData();  
  }  
  catch (FileNotFoundException e) {  
    // falls die angegebene Datei nicht existiert  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }  
  catch (ArgumentException e) {  
    // falls der Anwender einen Leerstring übergibt  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }  
  catch (DirectoryNotFoundException e) {  
    // falls das Verzeichnis nicht existiert  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }


Warum die 3fache Schreibarbeit, wenn ich es auch einfach wie folgt lösen könnte:
Code:
  try {  
    obj.GetData();  
  }  
  catch (Exception e) {  
    Console.WriteLine(e.Message + "- Die Datei existiert nicht.");  
  }

Die einzige logische Erklärung, welche mir einfällt währe, dass die 2te Variante
mit schlechten Programmierstil gleichzusetzten ist.

mfg Binäru$
Binäru$ ist offline   Mit Zitat antworten
Alt 09.09.08, 19:32   #11 (permalink)
Boardfotograf
 
Registriert seit: 21.12.07
GambaJo Leistung: Z3
Likes: 63
Standard

Ich denke, dass das nur ein Beispiel war.
Das erste Beispiel ist eher für Fälle bei denen in den einzelnen catch-Blöcken etwas anderes passieren soll (in der Regel mehr als nur eine Fehlermeldung).
GambaJo ist offline   Mit Zitat antworten
Alt 10.09.08, 09:07   #12 (permalink)
Themenstarter
 
Registriert seit: 09.09.08
Schnauf Leistung: Facit NTK
Likes: 0
Standard

naja stimmt schon aber mein ausbilder meinte es sei sehr gut so^^

also belasse ich es mal dabei aber danke für die gute hilfe

ich werde mich bestimmt wieder melden aber ihr könnt mich ja auch mal über icq anschreiben und mir einen crashkurs im programmieren geben wenn ihr wollt.

bin immer so gegen 18 Uhr am PC

ICQ: 266873497

Mit freundlichen Grüßen

Sven
Schnauf ist offline   Mit Zitat antworten
Alt 12.09.08, 01:20   #13 (permalink)
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Zitat:
Original von Schnauf
naja stimmt schon aber mein ausbilder meinte es sei sehr gut so^^

also belasse ich es mal dabei aber danke für die gute hilfe

ich werde mich bestimmt wieder melden aber ihr könnt mich ja auch mal über icq anschreiben und mir einen crashkurs im programmieren geben wenn ihr wollt.

bin immer so gegen 18 Uhr am PC

ICQ: 266873497

Mit freundlichen Grüßen

Sven
[OT]
Ich denke fpr den Crashkurs sollte dein Ausbilder verantwortlich sein, oder?
Sprich Ihn mal drau an und frag ihn, ob er dir einige Kniffe und Trick zeigen könnte.
Grundlagen sollten ja bei dir schon vorhanden sein.

Hab dich mal geaddet im ICQ. Wenn du fragen o.Ä. hast kannste mich gerne fragen.
[/OT]
reaLInsanity ist offline   Mit Zitat antworten
Alt 12.09.08, 09:20   #14 (permalink)
Themenstarter
 
Registriert seit: 09.09.08
Schnauf Leistung: Facit NTK
Likes: 0
Standard

naja er sagt mir die ganze Zeit, das ich autodidaktisch arbeiten soll.
Klappt ja auch im Prinzip aber wenn ich irgentwo häng und dann net weiterkomm dachte ich eigendlich das ich dann Hilfe von ihm bekommen würde. Das war aber nicht der Fall...
Naja
hab dann ja jetzt trotzdem nen ansprechpartner^^

Mit freudlichen Grüßen
Schnauf



von mir aus close
Schnauf ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » PC Foren » Die Problemzone » try und catch
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
try&catch Java tanj Code Kitchen 11 24.06.08 16:48


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61