| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
1000 nopan heittoaEntropia 28.12.07 19:22 Heittää noppaa 1000 kertaa ja näyttää tuloksen pylväsdiagrammina (Servlet/SVG)
package palkit; // Entropia 28-12-07 // tämä olisi voinut olla paljon nätimpikin // käyttämällä esimerkiksi taulukkoja tai // ArrayListejä mutta koska tein sen koulun // harjoitustyöksi, se on nyt minkälainen on import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SVGservletti extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { int i = 0; int heitto = 0; int s1, s2, s3, s4, s5, s6 = 0; int k1, k2, k3, k4, k5, k6 = 0; int a1, a2, a3, a4, a5, a6 = 0; int max, maxs = 0; int yksikko = 0; int yht = 0; public SVGservletti() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/svg+xml"); // arvotaan silmäluvut for(i = 0; i < 1000; i++) { heitto = 1 + (int)(Math.random() * 6); if(heitto == 1) s1++; if(heitto == 2) s2++; if(heitto == 3) s3++; if(heitto == 4) s4++; if(heitto == 5) s5++; if(heitto == 6) s6++; } // etsitään suurin if(s1 > max) { max = s1; maxs = 1; } if(s2 > max) { max = s2; maxs = 2; } if(s3 > max) { max = s3; maxs = 3; } if(s4 > max) { max = s4; maxs = 4; } if(s5 > max) { max = s5; maxs = 5; } if(s6 > max) { max = s6; maxs = 6; } // lasketaan yhden korkeus yksikko = Math.round(400 / max); // lasketaan palkeille oikeat alkamiskohdat a1 = 400 - (s1 * yksikko); a2 = 400 - (s2 * yksikko); a3 = 400 - (s3 * yksikko); a4 = 400 - (s4 * yksikko); a5 = 400 - (s5 * yksikko); a6 = 400 - (s6 * yksikko); // lasketaan palkkien korkeudet k1 = s1 * yksikko; k2 = s2 * yksikko; k3 = s3 * yksikko; k4 = s4 * yksikko; k5 = s5 * yksikko; k6 = s6 * yksikko; yht = s1 + s2 + s3 + s4 + s5 + s6; // pistetään svg maailmalle PrintWriter out = response.getWriter(); out.println("<?xml version=\"1.0\"?>"); out.print("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\""); out.println(" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">"); out.println(""); out.println("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"640\" height=\"480\">"); // palkki 1 out.print("<rect x=\"10\" y=\"" + a1 + "\" width=\"50\" height=\"" + k1 + "\" rx=\"5\""); out.println(" style=\"fill:#ff0000; stroke:#000000;stroke-width:2px;\" />"); out.println("<text x=\"10\" y=\"420\" style=\"font-weight: bold\">1</text>"); out.println("<text x=\"10\" y=\"440\">" + s1 + "kpl</text>"); // palkki 2 out.print("<rect x=\"70\" y=\"" + a2 + "\" width=\"50\" height=\"" + k2 + "\" rx=\"5\""); out.println(" style=\"fill:#ff0000; stroke:#000000;stroke-width:2px;\" />"); out.println("<text x=\"70\" y=\"420\" style=\"font-weight: bold\">2</text>"); out.println("<text x=\"70\" y=\"440\">" + s2 + "kpl</text>"); // palkki 3 out.print("<rect x=\"130\" y=\"" + a3 + "\" width=\"50\" height=\"" + k3 + "\" rx=\"5\""); out.println(" style=\"fill:#ff0000; stroke:#000000;stroke-width:2px;\" />"); out.println("<text x=\"130\" y=\"420\" style=\"font-weight: bold\">3</text>"); out.println("<text x=\"130\" y=\"440\">" + s3 + "kpl</text>"); // palkki 4 out.print("<rect x=\"190\" y=\"" + a4 + "\" width=\"50\" height=\"" + k4 + "\" rx=\"5\""); out.println(" style=\"fill:#ff0000; stroke:#000000;stroke-width:2px;\" />"); out.println("<text x=\"190\" y=\"420\" style=\"font-weight: bold\">4</text>"); out.println("<text x=\"190\" y=\"440\">" + s4 + "kpl</text>"); // palkki 5 out.print("<rect x=\"250\" y=\"" + a5 + "\" width=\"50\" height=\"" + k5 + "\" rx=\"5\""); out.println(" style=\"fill:#ff0000; stroke:#000000;stroke-width:2px;\" />"); out.println("<text x=\"250\" y=\"420\" style=\"font-weight: bold\">5</text>"); out.println("<text x=\"250\" y=\"440\">" + s5 + "kpl</text>"); // palkki 6 out.print("<rect x=\"310\" y=\"" + a6 + "\" width=\"50\" height=\"" + k6 + "\" rx=\"5\""); out.println(" style=\"fill:#ff0000; stroke:#000000;stroke-width:2px;\" />"); out.println("<text x=\"310\" y=\"420\" style=\"font-weight: bold\">6</text>"); out.println("<text x=\"310\" y=\"440\">" + s6 + "kpl</text>"); out.println("<text x=\"10\" y=\"460\">Yhteensä: " + yht + " heittoa</text>"); out.println("</svg>"); out.close(); // nollataan muuttujat a1 = a2 = a3 = a4 = a5 = a6 = 0; k1 = k2 = k3 = k4 = k5 = k6 = 0; s1 = s2 = s3 = s4 = s5 = s6 = 0; heitto = max = maxs = yksikko = 0; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ei tehdä mitään } } editoitu: 01:41 30.12.07 ajv 14:59 29.12.07 Miksei koulun harjoitustyössä saanut käyttää taulukoita? :D Irksome 18:30 29.12.07 Olisihan tuon voinut siistiä ja laittaa sen jälkeen tänne, olis voinut ehkä sitten plussa napsahtaa. Nykyisellään tuosta ei kannattane esimerkkiä ottaa. jel 00:03 30.12.07 Mielestäni hyvä yksinkertainen esimerkki svg:n tekemisestä. Plussa siitä. Akiro 12:59 30.12.07 Ei ehkä kovin edustava muuten, mutta selkiää SVG:n teko. chiman 13:18 30.12.07 Plussaa koodin siististä ulkoasusta, miinusta taulukoiden käyttämättömyydestä. Taulukoiden käyttäminen olisi lyhentänyt koodirivien määrän noin viidesosaan. Muuttujaa maxs ei käytetä mihinkään. Esko 14:57 2.1.08 ajv kirjoitti: Miksei koulun harjoitustyössä saanut käyttää taulukoita? :D Koska koulussa halutaan opettaa. Perustelu on yksinkertainen, mikäli tarkoitus on opettaa kaikki opetettavan kielen ominaisuudet, on osa harjoitustehtävistä pakolla hölmöjä. On kyllä aika kankeasti tehty tuo generointi, lienee ollut laiska copy/paste vauhdissa :) Entropia 21:06 2.1.08 Kävin tämän tekemässä välipäivinä koululla iltasella, silloin ei jaksanut paljon muuta kuin copy-pastettaa. Tosiaan, jos on tarkoituksena oppia kieli niin Mureakuha täynnä ArrayListeillä ja muilla hienoilla virityksillä tehtyjä koodipätkiä ei ole paras paikka aloittaa. Taulukoilla ja for-lauseillahan tuo olisi pienentynyt varmasti kolmasosaan koostaan, mutta sitä on vasta-alkajan vaikeampi seurata. |
![]() Haku
|