LukeGee Geschrieben 21. Februar 2007 Teilen Geschrieben 21. Februar 2007 Hallo, bin C# Umsteiger und habe mit Java frisch angefangen. Habe zum "reinkommen" versucht ein kleines Programm zu schreiben, das die Streckung von Formen berechnet. (ganz banal). Es funktioniert ganz gut, aber vielleicht könnte sich den Code hier mal jemand durschauen und sagen, was ich besser machen könnt. Hier der Code: /* * Main.java * * Created on 21. Februar 2007, 09:45 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package streckfaktor032; import java.io.*; /** * * @author lukas */ public class Main { /** Creates a new instance of Main */ public Main() { } /** * @param args the command line arguments */ public static void main(String[] args) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("Wieviele Ecken hat die zu streckende Form ?"); String a = in.readLine(); int a_ = Integer.parseInt(a); float[] side = new float[a_]; System.out.println("Geben Sie den Streckfaktor an: "); String k = in.readLine(); float k_ = Float.parseFloat(k); float[] finish = new float[a_]; for (int i = 0; i<a_; i++) { System.out.println("Geben Sie nun die Laenge für die Seite " + (i+1) + " ein."); String g = in.readLine(); side[i] = Float.parseFloat(g); finish[i] = side[i]*k_; } System.out.println("Die gestreckte Form hat folgende Maße: "); for (int i = 0; i<a_; i++) { System.out.println("Seite " + (i+1) + " = " + finish[i]); } } catch (Exception e) { System.out.println("! EIN FEHLER IST AUFGETRETEN !"); } } } Danke. MfG Luke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 21. Februar 2007 Teilen Geschrieben 21. Februar 2007 /* * Main.java * * Created on 21. Februar 2007, 09:45 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package streckfaktor032; import [COLOR="Red"]java.io.*[/COLOR]; /** * * @author lukas */ public class Main { [COLOR="Red"]/** Creates a new instance of Main */ public Main() { }[/COLOR] /** * @param args the command line arguments */ public static void main(String[] args) { [COLOR="Red"]BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); Hilfsklasse wäre eleganter[/COLOR] try { System.out.println("Wieviele Ecken hat die zu streckende Form ?"); String [COLOR="Red"]a AAAAAA, in einer Woche weiss keiner was das ist[/COLOR] = in.readLine(); int a_ = Integer.parseInt(a); float[] side = new float[a_]; System.out.println("Geben Sie den Streckfaktor an: "); String k = in.readLine(); float k_ = Float.parseFloat(k); float[] finish = new float[a_]; for (int i = 0; i<a_; i++) { System.out.println("Geben Sie nun die Laenge für die Seite " + (i+1)[COLOR="Red"]i++ geht auch[/COLOR] + " ein."); String g[COLOR="Red"]das berühmte g, wie das a oder b[/COLOR] = in.readLine(); side[i] = Float.parseFloat(g); finish[i] = side[i]*k_; } System.out.println("Die gestreckte Form hat folgende Maße: "); for (int i = 0; i<a_; i++) { System.out.println("Seite " + (i+1) + " = " + finish[i]); } } catch (Exception e) { [COLOR="Red"]System.out.println("! EIN FEHLER IST AUFGETRETEN !") was für ein Fehler ist den aufgetreten?[/COLOR]; } } } was passiert wenn ich statt eines floats oder des ints ein skdfhgsajgjhdg eingebe oder blank enter ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukeGee Geschrieben 21. Februar 2007 Autor Teilen Geschrieben 21. Februar 2007 Hm...ja, das Programm wird zwar abgefangen, aber ich könnt dafür ja ne if Anweisung oder was in der Art machen, die püft, ob der Wert gültig ist, oder ? Jaja, immer diese A und Gs Wie benennt man Variablen denn offiziell ? Ich meine "laengederseite" ist auch nicht grade das, was ich mir unter gut vorstelle. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 21. Februar 2007 Teilen Geschrieben 21. Februar 2007 Ich mache nie den Umweg über String im Mainprogramm. das können auch die methoden intern machen. int iSeitenlaenge = IOHelp.getInt(); float f**** = IOHelp.getFloat(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Newlukai Geschrieben 22. Februar 2007 Teilen Geschrieben 22. Februar 2007 Jaja, immer diese A und Gs Wie benennt man Variablen denn offiziell ? Ich meine "laengederseite" ist auch nicht grade das, was ich mir unter gut vorstelle. Dafür gibt's keine Spezifikation, an die man sich zu halten hat. Es gibt nur eine Regel: Verwende sprechende Namen. Wenn Du laengeDerSeite verwenden willst, tu' das. Ich würde zwar sideLength oder so bevorzugen, aber das ist ja Geschmackssache. Und wie baba007 schon bemerkt hat: Einen leeren Konstruktor kannste Dir auch sparen. Und importiere nie ein ganzes Paket, sondern nur die benötigten Klassen. Weiterhin sieht ein ganzes Programm in einem try-Block wirklich blöd aus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukeGee Geschrieben 22. Februar 2007 Autor Teilen Geschrieben 22. Februar 2007 Ich mache nie den Umweg über String im Mainprogramm. das können auch die methoden intern machen. int iSeitenlaenge = IOHelp.getInt(); float f**** = IOHelp.getFloat(); Hm, dieses IOHelp funktionier bei mir nicht ? Woran liegt das ? habe java.io ja importert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 22. Februar 2007 Teilen Geschrieben 22. Februar 2007 ne du IOHelp habe ich mir selber gebastelt um an das ganze parsen, buffern usw. nicht mehr zu denken. in den methoden ist nichts anderes als bei dir im hauptprogramm, doch es macht den quellcode übersichtlicher und erspart etwas zeit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukeGee Geschrieben 22. Februar 2007 Autor Teilen Geschrieben 22. Februar 2007 Achso, ok Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cobinja Geschrieben 22. Februar 2007 Teilen Geschrieben 22. Februar 2007 for (int i = 0; i<a_; i++) { System.out.println("Geben Sie nun die Laenge für die Seite " + (i+1)[COLOR="Red"]i++ geht auch[/COLOR] + " ein."); Das ist verkehrt. Wenn du i++ benutzt, wird der Schleifenzähler der for-Schleife einen hochgezählt. Du lässt also jede zweite Seite aus. Bleib lieber bei (i+1) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 22. Februar 2007 Teilen Geschrieben 22. Februar 2007 Stimmt, sorry :upps Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukeGee Geschrieben 22. Februar 2007 Autor Teilen Geschrieben 22. Februar 2007 @baba007 Habe es auch mal probiert das ganze parse Zeug in ne Klasse und n Package zu machen und die aufzurufen. Habe allerdings Problemchen. Hier n Beispiel für die KLasse: package IOHelp; import java.io.*; public class getInt { private String eingabe; private int eingabe_; public int getInteger() { try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); eingabe = in.readLine(); eingabe_ = Integer.parseInt(eingabe); } catch (Exception e) { //... } return eingabe_; } } Wenn ich sie in meiner Main Klasse so verwende: IOHelp iohelp = new IOHelp(); int blabla = iohelp.getInteger(); ...funktioniert es. wenn ich es jedoch mit dem Package will machen, nicht. Also ich habe oben ein import IOHelp.*; wenn ich es dann über int blabla = IOHelp.getInteger(); aufrufen will, geht es nicht bzw. bekomme ich das getInteger() gar nicht zur Auswahl. !? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 22. Februar 2007 Teilen Geschrieben 22. Februar 2007 Servus, das kann beides nicht funktionieren. Du willst eine Klasse IOHelp, deklarierst aber ein Package mit dem Namen. Die Klasse heißt wie die Methode heißen soll und die Methode gibt es auch noch. Das geht nicht. Erzeuge eine Klasse in einem Package Deiner Wahl, instanziere sie und rufe die Methode auf. Bei einer solchen Util-Klasse kannst Du auch eine static-Methode definieren, dann brauchst Du keine Instanz, sondern kannst die Methode direkt auf der Klasse aufrufen. Peter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukeGee Geschrieben 22. Februar 2007 Autor Teilen Geschrieben 22. Februar 2007 Sorry, hatte mich oben verschrieben. Es sollte so heißen: getInt iohelp = new getInt(); int blabla = iohelp.getInteger(); So hats auch funktioniert, aber ich möchte es, dass ich nicht extra die Klasse initialisieren muss, sondern, auch so machen kann: int blabla = IOHelp.getInteger(); Also über das Package irgendwie. Also wie kann ich über das Package die Methode getInteger() der Klasse getInt aufrufen? so wie es baba007 auch gezeigt hat in seinem beispiel. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 22. Februar 2007 Teilen Geschrieben 22. Februar 2007 Das funktioniert, indem du das machst, was dir kingofbrain einem post vor deinem geraten hast. Das heißt du schreibst in deinen Methodenkopf noch ein "static" hinzu, dies bewirkt, dass du die methode dann einfach nur mit einem aufruf des klassennamens und dann durch nen punkt getrennt den methoden namen, aufrufen kannst. bei baba007 ist es dort oben nämlich auch kein package, sondern die klasse, welche IOHelp heißt. Der Methodenkopf würde dann bei dir folgendermaßen aussehen: public static int getInteger() { [...] } und aufzurufen ist sie dann so: int blabla = IOHelp.getInt.getInteger(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukeGee Geschrieben 22. Februar 2007 Autor Teilen Geschrieben 22. Februar 2007 Achso, sorry. Ja, jetz hab ich's verstanden und es geht auch. thx! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.