1000 nopan heittoa

Entropia 28.12.07 19:22

Heittää noppaa 1000 kertaa ja näyttää tuloksen pylväsdiagrammina (Servlet/SVG)

 Tekstiversio  Arvo: 1 (7 ääntä)  Äänestä: +  -
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.