Beiträge von a9bejo
-
-
hier mal alle drei wege im vergleich:
Java
Alles anzeigenimport java.util.regex.Pattern; public class IdValidationTest { /**Mit charAt und isDigit: */ public boolean isValidId(String id) { if (id.length() != 6) { return false; } for (char c : id.toCharArray()) { if (!Character.isDigit(c)) { return false; } } return true; } /**Mit Regular Expressions*/ public boolean isValidId_2(String id) { Pattern pattern = Pattern.compile("^[0-9]{6}$"); return pattern.matcher(id).find(); } /**Mit Integer Conversion*/ public boolean isValidId_3(String id) { if(id.length() != 6){return false;} try { Integer.valueOf(id); return true; } catch (NumberFormatException e) { return false; } } public static void main(String[] args) { new IdValidationTest().eval(); } public void eval() { final String[] testdata = new String[]{"123456","12d456","1234567","abcdefg"}; for(String id : testdata){ String status; status = isValidId(id) ? "valid" : "invalid"; System.out.println("(Mit charAt und isDigit) id '"+id + "' is " + status); status = isValidId_2(id) ? "valid" : "invalid"; System.out.println("(Mit Regular Expression) id '"+id + "' is " + status); status = isValidId_3(id) ? "valid" : "invalid"; System.out.println("(Mit Integer Conversion) id '"+id + "' is " + status); System.out.println(); } } }
-
Also wenn du eine zahl in einen string umgewandelt hast, kannst du dir wohl sicher sein, das da auch nur zahlen drinnen steht
wenn du einen string hast und wissen willst, ob da nur ziffern drinnen stehen, kannst du das mit java.lang.Integer.valueOf(java.lang.String) erreichen prüfen (es wird eine exception geworfen wenn das konvertieren schiefgeht, und die kannst du abfangen).
Ich würde hier aber zwei fliegen mit einer klappe schlagen und eine regular expression in der form /^[0-9]{6}$/ verwenden. Die stellt sicher, dass es zahlen sind und zwar genau sechs.
-
Zitat von Wings-of-Glory
...was würdet ihr sagen, ab wann wäre die nutzung einer template engine à la struts, freemarker, etc. sinnvoll?...
in dem moment, in dem du
* mehr als ein paar tage daran arbeiten musst
* mehr als (frei geschätzt) 1000 zeilen code hast.
* einzelne komponenten deiner applikation wo anders wiederverwenden möchtest.
* einzelne komponenten deiner applikation austauschen möchtest (z.b wenn ein web interface und eine desktopgui haben möchtest)In der regel gilt: mehr aufwand zu beginn, weniger aufwand im weiteren verlauf des projekts.
Eine Java Applikation sollte eigentlich immer model2 sein (so nennt man die MVC architektur in java web applikationen,welche struts usw. implementieren), weil erst hier javas stärken zur geltung kommen können. Wenn du auf model2 verzichten kannst, wirst du mit einer scriptsprache + cgi vermutlich besser bedient sein.
Zitat von Wings-of-Glorywas ist deren vorteil gegenüber reinem jsp?
[wikipedia]Model-view-controller[/wikipedia]Und um jetzt noch den lobbyisten raushängen zu lassen:
Mit Ruby on Rails kannst du eine komplett modulare 3-tier applikationen genauso schnell erstellen wie ein dahingeschmiertes php script.
-
-
Zitat von gelbasack
String.valueOf(-12345).length()==6 - müsste man also den ersten Char abfragen... einigen wir uns auf Geschmackssache?
dann nehm ich halt den absolutwert:
mein argument ist ja auch gar nicht so der aufwand der abfrage, sondern die öffensichtlichste lösung zu finden. Ich denke, die stringkonvertierung ist der direktere weg zum ziel, zumindest wenn nach der anzahl der stellen gefragt wird.
Wenn wir statt einer id z.b einen geldbetrag hätten, der zwischen 99999 und 1000000 euro liegen muss, dann würd ich das auch so wie du abprüfen.
-
Zitat von gelbasack
interressante überlegung. Ich würde aber die string methode vorziehen, aus folgendem grund:
wenn du mir eine zahl gibst und mich fragst, ob die genau sechs stellen hat, dann würde ich nicht überlegen, zwischen welchen zwei zahlen sie stehen muss, damit sie 6 stellen hat.
Ich würde stattdessen einfach die ziffern abzählen, sprich die zahl als eine kette von zeichen betrachten. Also genau dasselbe, als wenn du mir statt einer zahl eine reihe von buchstaben gibst und mich da nach den stellen fragst.
ein string ist ja (logisch betrachtet) nichts weiter als eine liste von zeichen. Also ist die konvertierung in String eigentlich genau das, was man selbst instinktiv machen würde.
-
Zitat von beefy
Es gibt ein Flash-Demo das die Bedienung dieser Software erläutert. So revolutionär schaut die Sache da nicht mehr aus, mehr wie eine Weiterführung von Ideen wie man sie aus CASE Tools wie Rational Rose kennt.
Ganz deine meinung! Das ist graphisches programmieren. Gibt es eh schon ewig und hat sich nie durchgesetzt. Eigenständig programmieren tut diese maschine nun wirklich nicht.
Zitat von flash demo
...Using the help bulp, you use the code library to define the condition for the rule...Eine maschine, die selbst progammiert, müsste schon von allein herausfinden, welche bedingung da hingehört, welche daten manipuliert werden sollen, wie das datenmodell ausszusehen hat etc.
Wenn ich das datenmodell und die algorithmen selber entwerfen muss, was hat die software denn dann eigentlich so tolles für mich getan?
-
hardcopy kann ich keine empfehlen, aber in der offiziellen dokumentation solltest Du eigentlich eh alles finden was du suchst.
-
Java
Alles anzeigenimport java.util.LinkedList; import java.util.List; import junit.framework.Assert; import junit.framework.TestCase; /** Das Problem: java weiss nicht, das das objekt aus deiner liste ein array aus integern ist. */ public class CastingTest extends TestCase { /** ERSTE LÖSUNG: wenn du das object aus der liste nimmst sagst du bescheid, um was es sich handelt (UpCasting)*/ public void testUpCasting(){ List list = new LinkedList(); list.add(new int[]{1,2,3}); int[] arr = (int[]) list.get(0); // !!! Assert.assertEquals(arr[1],2); } /** ZWEITE LÖSUNG: du erstellst nicht eine liste, die jede art von objekt aufnehmen kann, sondern eine, die nur arrays aus integern akzeptiert(generics). */ public void testGenerics(){ List<int[]> list = new LinkedList<int[]>(); // !!! list.add(new int[]{1,2,3}); int[] arr = list.get(0); Assert.assertEquals(arr[1],2); } }
die zweite lösung ist besser (übersichtlicher und weniger fehleranfällig). funktioniert aber erst ab java > 1.5.
-
Zitat von Ubik
Brauchst du das Canvas überhaupt? Du könntest doch einfach auf das JPanel zeichnen, bzw. könntest du dem (Haupt-)JPanel ein weiters JPanel einfügen, auf das du dann zeichnest.
Chris: Du solltest Ubik's rat folgen und statt eines Canvas einen weiteren JPanel verwenden. Canvas ist ein sehr alte Klasse aus dem AWT, die nicht sehr gut mit Swing-Komponenten (wie JPanel) zusammenspielt.
Noch ein Tip: Wenn du in einem JPanel die paint(Graphics g) methode überschreibst, solltest du dort als erstes die paint-methode des parents aufrufen, also
Ich weiss jetzt nicht mehr so genau, welche probleme auftauchen können, wenn du das nicht tust. Ich weiss aber das es solche Probleme gibt
-
Java
Alles anzeigenimport java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /* * Created on 05.04.2005 * * @author Benjamin Ferrari */ /** * @author ferrari * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class GP { private List<Thread> threads = new LinkedList<Thread>(); private Map<String, Rennfahrer> fahrer = new HashMap<String, Rennfahrer>(5); private String[] fahrerNamen = new String[] { "schuhmacher", "trulli", "alonso" }; public void start() { for (String name : fahrerNamen) { fahrer.put(name, new Rennfahrer()); } for (Rennfahrer rennfahrer : fahrer.values()) { Thread thread = new Thread(rennfahrer); thread.start(); threads.add(thread); } for(Thread thread : threads){ try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } for (String name : fahrer.keySet()) { System.out.println("Zeit für " + name + " war " + fahrer.get(name).getTime()); } } public static void main(String[] args) { new GP().start(); } } class Rennfahrer implements Runnable { private int time = 0; /** * @return Returns the x. */ public int getTime() { return time; } Rennfahrer() { } public void run() { for (int i = 0; i <= 200; i++) { time = time + (int) (Math.random() * 6); try { Thread.sleep(1); } catch (Exception e) { } } } }
-
Why don't you just [STFW]password protect folder windows xp[/STFW]?
-
-
Zitat von bosie
wenns windows sein darf.
ist relativ einfach zu erlernen und auch mächtig. dazu noch eine angenehme syntax, ich mag die syntax von python net:Codedef ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = raw_input(prompt)
kommt irgendwie net so gut, is aber nur meine meinung, sicher sind auch python/ruby nett
Ich weiss nicht, was dir an dem code oben nicht gefällt, aber es ist wohl wirklich reine Geschmacksache.
Ich finde es ist gerade die leserliche syntax, die python gegenüber anderen sprachen einen vorteil verschafft.
Schau dir mal dieses programm an, das liesst sich quasi wie pseudocode:
Code
Alles anzeigendef find_path(graph, start, end, path=[]): """backtracking algorithm that searches a path from start to end.""" path = path + [start] if start == end: return path if start not in graph: return None for node in graph[start]: if node not in path: newpath = find_path(graph, node, end, path) if newpath: return newpath #ein beispielgraph zum testen: graph = {'A':['C','D'], 'B':['A','E'], 'C':['B'], 'D':['A','B'], 'E':['D'], 'F':[] } print find_path(graph,'A','E') #output: #['A', 'C', 'B', 'E']
-
Mit Java und C# eine kleine applikation ( vielleicht <5000 LOC) zu schreiben bedeutet doch, mit kanonen auf spatzen zu schiessen. Eine programmiersprache soll mir beim programmieren so wenig wie möglich im wege stehen und weder java noch c# zeichnen sich hier meiner meinung nach aus, weil sie eben vor allem für sehr grosse, kritische Unternehmensanwendungen designt wurden, wo ganz andere bedingungen herrschen.
ruby (und auch python) haben wesentlich kürzere entwicklungszeiten und skalieren trozdem prima, wenn die codebasis anwächst. Java ist vielleicht geeignet für ebay oder amazon, aber wohl nicht für musikstudent.
Ausserdem unterstützen C#,Java und C++ zwar bis zu einem gewissen grad objektorientierte methoden, sind aber zum lernen von OOP nicht sehr gut geeignet (wegen der vielen ausnahmen).
-
Zitat von Irrlicht
Kommt wohl auf die Branche an. Aber Programme, bei denen z.B. Performance wichtig ist, werden wohl von keinem 'Profi' in Java geschrieben werden.
mag sein, das trifft aber nur auf einen sehr kleinen teil des softwarekuchens zu.
Es geht hier ja nicht wirklich darum, dass in einem projekt 'performance wichtig ist', sondern das 'performance so entscheident ist, das man die Nachteile einer (schnelleren) alternative in kauf nehmen muss'.
-
(wobei mir ruby derzeit etwas mehr spass macht). Beide Sprachen sind nicht nur sehr mächtig, sondern auch sehr elegant und einfach zu lernen. Du erzielst einerseits sehr schnell fortschritte, andererseits bist aber in deinen möglichkeiten nicht beschränkt, falls du mal was komplexeres machen möchtest.
Für Ruby gibt es zwei wichtige bücher, die du online lesen kannst:
Why's (Poignant) Guide to Ruby richtet sich an programmieranfänger,und die ruby-bibel, Programming Ruby, fängt auch ganz vorne an.
Auch für python findet sich viel gute documentation, die sich an anfänger richtet:
http://www.python.org/moin/BeginnersGuide/NonProgrammers
Unabhängig von der Sprache, hier noch drei tipps zum lernen:
- Theorie lernen (buch) - ohne gehts nicht!
- Selber viele programme schreiben - ohne gehts nicht!
- Programme von anderen lesen und verstehen - ohne gehts nicht!
besonders der letzte punkt ist sehr wichtig, weil er von vielen vernachlässigt wird und sich das früher oder später rächt. -
Zitat von Sicka
Hast du vielleicht Vorschläge für eine gute Doku?
Das von Lord Binary empfohlene sun tutorial findest du hier. Wahrscheinlich die beste quelle, weil ziemlich genau und detailliert. Das tutorial berhandelt aber viel mehr als nur die servlet api und ist zu beginn etwas mühsam, gerade weil es so ins detail geht.
Es gibt auch ein kapitel über Servlets und JSPs in java ist auch eine insel, vielleicht ist das zum einstieg besser geeignet.
-
javax.servlet ist teil von [wikipedia]J2EE[/wikipedia] (java enterprise endition).
Tomcat ist die Referenzimplentierung eines J2EE Webcontainers und enhält auch die servlet-api. Für den anfang ist das alles, was du für die webentwicklung mit java brauchst. Abgesehen von viel Zeit und einer guten Doku natürlich