[Tablice] Zliczanie punktów

0

Witam,
Jestem nowy na forum jak też nowy w Javie opanowałem dopiero warunki, pętle, tablice tak o oraz funkcje.
Ale mam problem ze swoim pseudo-quizem.
Ponieważ chce, żeby zliczał punkty do tablicy ale warunki itp jest w try, i poza tym już mi nie widzi danych co jest oczywiste ale jak zrobić żeby widziało?

package quiz;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StreamTokenizer;

public class Main
{
                                                           /* FUNKCJA
                        static boolean odp(double q1, double q2, double q3, double q4)
                         {
                        if (q1 == 1 || q1 == 2 || q1 == 3 || q1 == 4)
                            if (q2 == 1 || q2 == 2 || q2 == 3 || q2 == 4)
                                if (q3 == 1 || q3 == 2 || q3 == 3 || q3 == 4)
                                    if (q4 == 1 || q4 == 2 || q4 == 3 || q4 == 4)
                                return true;
                           else return false;
                        else return false;
                      else return false;
                    else return false;
                         }
                                                           */

    public static void main(String[] args) 
    {

       System.out.println("Malutki quiz ;)");
            boolean zacznij = true; // zmienna do I pętli
            double odpI = 0;
                // TABLICE
                    int wojna[] = new int [5];
                    //int bio[] = new int [5];
                System.out.println("Staniesz przed wyborem kategorii quizu");
                System.out.println("Jesteś gotowy?");
                System.out.println("Mam nadzieje, że tak...");
                    Reader czyt = new BufferedReader (new InputStreamReader(System.in)); // buforowanie
                    StreamTokenizer wart = new StreamTokenizer(czyt); // deklarowanie funkcji odczytującej
               
                System.out.println("Wciśnij: 1 - jeżeli interesuję Cie II Wojna Światowa");
                System.out.println("Wciśnij: 2 - jeżeli interesuję Cie Biologia");
                // PĘTLA - przy podaniu złego znaku.
                do
                {
                    try
                       {
                         wart.nextToken(); // przygotowanie do odczytu
                         odpI = wart.nval;
                       }
                        catch (IOException e)
                        {
                        System.out.println("Co Ty wpisałeś?...");
                        }
                if (odpI==1 || odpI==2)
                {
                zacznij = false;
                }
                    else
                    {
                    System.out.println("Miałeś wcisnąć 1 lub 2, więc jeszcze raz pytam:");
                    zacznij = true;
                    }
                }while(zacznij==true);
                  
                       // II Wojna Światowa
                               // zmienne do odpowiedzi
                       double q1 = 0;
                       double q2 = 0;
                       double q3 = 0;
                       double q4 = 0;
                       double q5 = 0;
                      // boolean dalej;
                      // dalej = odp(q1,q2,q3,q4);
                       boolean ponow = true;
                                // Warunek na II WŚ + treśc quizu.
                            if (odpI==1);
                                {
                                   System.out.println("Więc wybrałeś II Wojne Światową. Bardzo mnie to cieszy.");
                                    System.out.println("Zadam Ci tylko 5 pytań, gdzie będziesz miał do wyboru 4 odpowiedzi.");
                                    System.out.println("Za każdą poprawną odpowiedź otrzymujesz 1pkt, za złą nic się nie dzieje.");
                                    System.out.println("Na końcu podlicze Twoje punkty.");
                                       // PYTANIE 1
                                        System.out.println("Pytanie pierwsze:");
                                        System.out.println("W którym roku wybuchła II Wojna Światowa?");
                                            System.out.println("1 - w 1939.\n2 - w 1914. \n3 - w 1938. \n4 - w 1930.");
                              do 
                                {
                                  try
                                    {
                                            wart.nextToken();
                                            q1 = wart.nval;
                                            if(q1 == 1 || q1 == 2 || q1 == 3 || q1 == 4)
                                                ponow = false;
                                            
                                            else 
                                    {
                                            System.out.println("Podaj liczbe od 1 do 4...");
                                            ponow = true;
                                    }

                                    }
                                    catch (IOException ee)
                                    {
                                    System.out.println("Co Ty wpisałeś?...");
                                    }
                                }while(ponow==true);

                                            // PYTANIE 2

                                         System.out.println("Pytanie drugie:");
                                         System.out.println("O której godzine oficjalnie rozpoczęła się II Wojna Światowa");
                                            System.out.println("1 - o 4:43.\n2 - o 4:55. \n3 - o 4:45. \n4 - o 4:35.");
                              do
                                {
                                  try
                                    {
                                            wart.nextToken();
                                            q2 = wart.nval;
                                            if(q2 == 1 || q2 == 2 || q2 == 3 || q2 == 4)
                                                ponow = false;

                                            else
                                    {
                                            System.out.println("Podaj liczbe od 1 do 4...");
                                            ponow = true;
                                    }

                                    }
                                    catch (IOException eee)
                                    {
                                    System.out.println("Co Ty wpisałeś?...");
                                    }
                                }while(ponow==true);

                                        // PYTANIE 3

                                         System.out.println("Pytanie trzecie:");
                                         System.out.println("Kiedy Rosja wkroczyła do Polski?");
                                            System.out.println("1 - w 17.09.1934\n2 - w 17.09.1939. \n3 - w 19.07.1940 \n4 - w 17.09.1993");
                              do
                                {
                                  try
                                    {
                                            wart.nextToken();
                                            q3 = wart.nval;
                                            if(q3 == 1 || q3 == 2 || q3 == 3 || q3 == 4)
                                                ponow = false;

                                            else
                                    {
                                            System.out.println("Podaj liczbe od 1 do 4...");
                                            ponow = true;
                                    }

                                    }
                                    catch (IOException eeee)
                                    {
                                    System.out.println("Co Ty wpisałeś?...");
                                    }
                                }while(ponow==true);

                                                                                    // PYTANIE 4

                                         System.out.println("Pytanie czwarte:");
                                         System.out.println("Kto był kancelrzem Niemiec?");
                                            System.out.println("1 - Hitler\n2 - Mussolini. \n3 - Stalin \n4 - Lenin");
                              do
                                {
                                  try
                                    {
                                            wart.nextToken();
                                            q4 = wart.nval;
                                            if(q4 == 1 || q4 == 2 || q4 == 3 || q4 == 4)
                                                ponow = false;

                                            else
                                    {
                                            System.out.println("Podaj liczbe od 1 do 4...");
                                            ponow = true;
                                    }

                                    }
                                    catch (IOException eeeee)
                                    {
                                    System.out.println("Co Ty wpisałeś?...");
                                    }
                                }while(ponow==true);
                                            
                                         // PYTANIE 5

                                         System.out.println("Pytanie czwarte:");
                                         System.out.println("Kiedy zakończyła się II Wojna Światowa?");
                                            System.out.println("1 - 8 V 1945\n2 - 5 VIII 1945. \n3 - 12 II 1945 \n4 - 24 XII 1945");
                              do
                                {
                                  try
                                    {
                                            wart.nextToken();
                                            q5 = wart.nval;
                                            if(q5 == 1 || q5 == 2 || q5 == 3 || q5 == 4)
                                                ponow = false;

                                            else
                                    {
                                            System.out.println("Podaj liczbe od 1 do 4...");
                                            ponow = true;
                                    }

                                    }
                                    catch (IOException eeeeee)
                                    {
                                    System.out.println("Co Ty wpisałeś?...");
                                    }
                                }while(ponow==true);
System.out.println("Dzięki za rozwiązanie quizu, pracuję nad punktacją oraz optymalizacją nie wspominając już o bilogii.");
            try {
                wart.nextToken();
                 q5 = wart.nval;
            } catch (IOException ex) {
                System.out.println("Co Ty wpisałeś?...");
            }
                                           
                                                                                     



                            }

}
}

Ten kod pewnie jest do optymalizacji ale na razie nie wiem jak, uczę się chce skończyć a później może skrócić go tą funkcją. Zawsze to n lini mniej ;)
Na końcu jest jeszcze raz wpisywanie danych, żeby program od razu się nie wyłączał w okienku (nie wiem jak to zastąpić dlatego zrobiłem tak)

Pozdrawiam, :)

0

ua... pisząc w ten sposób raczej nie osiągniesz oczekiwanych rezultatów, a co więcej sprawdzenie co jest źle jest piekielnie trudne.

Po pierwsze wydzieliłbym na twoim miejscu klasę Pytanie. W miej trzymał treść pytania i listę odpowiedzi. Kod od razu zrobi się jaśniejszy. Po drugie zamiast StreamTokenizer użyj Scanner. Nie będziesz musiał walczyć z blokami try/catch to uprości kod. Po trzecie po pobraniu odpowiedzi powinien być wstawiony warunek sprawdzający czy odpowiedź jest poprawna i wstawiający w razie czego dane do tablicy...

0

A możesz mnie jakoś bardziej oświecić, bo na prawdę dopiero się uczę dla samego siebie z zainteresowania ale jak już się uczę to jednak chciałbym dobrze :) Zdaje sobie sprawę, że ten kod to jest "pole bitwy" ale co zrobić inaczej na razie nie umiem...

0

a gdzie Ty tu masz poprawne odpowiedzi? Po naciśnięciu klawisza sprawdzasz tylko czy jest to liczba od 1 do 4 a potem powinieneś dać ifa czy ta naciśnięta liczba to odpowiednia odpowiedz. jak tak to w środku ifa inkrementujesz wcześniej zdefiniowaną zmienną int(zdefiniuj ją na samym początku metody main z początkową wartością 0). Jak kolo dobrze naciśnie do zwiększysz o jeden. Pod koniec programu wypisz tą zmienną-bedzie równa ilosći dobrych odpowiedzi.

0

Chciałem to zrobić na tablicach, sam nie wiem dlaczego ale taki kaprys mi przyszedł. Co do tego int'a. Ale tak jak pisałem dale ogranicza się do tych {} i poza nimi już nie ma tego wyniku nawet jeśli wszystkie odp były dobre.

0

Miałem chwilkę czasu związaną z ... no po sobocie w końcu.
Przerobiłem Twój program na taki który wykorzystyuje tablice i jest już troszeczkę obiektowy. Włatwy sposób dodasz sobie kolejne pytania,zagadnienia,odpowiedzi itp. No i zlicza dobre odp:)

Kod główny:

package quiz;

import java.util.*;

public class Quiz {

    public static void main(String[] args) {

        int iloscPoprawnychOdpowiedzi = 0;
        Scanner scanner = new Scanner(System.in);
        ObslugaQuizu quiz = new ObslugaQuizu();
        quiz.wstep();





        for (int pytanie = 0; pytanie < quiz.iloscPytan; pytanie++) {
            System.out.println("Pytanie numer " + Integer.valueOf(pytanie + 1).toString() + " :");
            System.out.println(quiz.pytaniaHistoria[pytanie]);

            for (int mozliwaOdpowiedz = 0;//
                    mozliwaOdpowiedz < quiz.iloscMozliwychOdpowiedziNaPytanie;//
                    mozliwaOdpowiedz++) //
            {
                System.out.println(mozliwaOdpowiedz + 1 + "   " + quiz.odpowiedzi[pytanie][mozliwaOdpowiedz]);
            }

            boolean nacisnal1234 = false;
            while (nacisnal1234 == false) {
                int odpowiedz = scanner.nextInt();

                if ((odpowiedz == 1) || (odpowiedz == 2) || (odpowiedz == 3) || (odpowiedz == 4)) {

                    nacisnal1234 = true;
                    //sprawdzanie czy podal poprawna odpowiedz po odjeciu 1 bo tablice od 0 numerowane
                    odpowiedz = odpowiedz - 1;
                    if (quiz.czyDobrzeWybranaOdpowiedz(pytanie, odpowiedz)) {
                        System.out.println("DOBRZE!!!");
                        iloscPoprawnychOdpowiedzi++;

                    } else {
                        System.out.println("NIestety zla odpowiedz ...");
                    }


                } else {
                    System.out.println("Podaj liczbe od 1 do 4...");
                }
            }

        }

        System.out.println("Ilosc poprawnych odpowiedzi : " + iloscPoprawnychOdpowiedzi);
        System.out.println("Koniec");
    }
}

I druga klasa - odpowiedzialna za pytania / odpowiedzi itp (musisz ją zapisać w pliku tak jak się nazywa klasa czy w tym wypadku ObslugaQuizu.java

package quiz;

public class ObslugaQuizu {
    
    public int iloscPytan;
    public int iloscMozliwychOdpowiedziNaPytanie;

    ObslugaQuizu()
    {
        iloscPytan = pytaniaHistoria.length;
        iloscMozliwychOdpowiedziNaPytanie = odpowiedzi[1].length;
    }

    public static final String[] pytaniaHistoria = {//
        "W którym roku wybuchła II Wojna Światowa?"//
        , "O której godzine oficjalnie rozpoczęła się II Wojna Światowa"//
        , "Kiedy Rosja wkroczyła do Polski?"//
        , "Kto był kancelrzem Niemiec?"//
        , "Kiedy zakończyła się II Wojna Światowa?"};   //
    public static final String[] odpowiedziPoprawne = {//
        "1939"//
        , "4:45"//
        , "17.09.1939"//
        , "Hitler"//
        , "1 - 8 V 1945"};//
    public static final String odpowiedzi[][] = {//
        {"1939", "1914", "1938", "1930"},//
        {"4:43", "4:55", "4:45", "4:35"},//
        {"17.09.1934", "17.09.1939", "19.07.1940", "17.09.1993"},//
        {"Hitler", "Mussolini", "Stalin", "Lenin"},//
        {"1 - 8 V 1945", "2 - 5 VIII 1945", "3 - 12 II 1945", "4 - 24 XII 1945"},//
    };

    public String wyswietlPytanie(int nrPytania) {
        return pytaniaHistoria[nrPytania];
    }

    public String[] wyswietlOdpowiedzi(int pytanie) {

        String tablicaMozliwychOdpowiedziNaPytanie[] = odpowiedzi[pytanie];
        return tablicaMozliwychOdpowiedziNaPytanie;
    }

    public boolean czyDobrzeWybranaOdpowiedz(int pytanie, int nrOdpowiedzi) {
        if (odpowiedzi[pytanie][nrOdpowiedzi].equals(odpowiedziPoprawne[pytanie])) {
            return true;
        } else {
            return false;
        }
    }

    public void wstep() {
        System.out.println("Malutki quiz ;)");
        System.out.println("Staniesz przed wyborem kategorii quizu");
        System.out.println("Jesteś gotowy?");
        System.out.println("Mam nadzieje, że tak...");
        System.out.println("");
        System.out.println("Zadam Ci tylko 5 pytań, gdzie będziesz miał do wyboru 4 odpowiedzi.");
        System.out.println("Za każdą poprawną odpowiedź otrzymujesz 1pkt, za złą nic się nie dzieje.");
        System.out.println("Na końcu podlicze Twoje punkty.");
        System.out.println("");
    }


}

Prawda ze o wiele czytelniejsze i łatwiejsze w slędzeniu a i funkcjonalnośc o wiele większa?:)

Pozdro

0

Dzięki, masz racja ja nie wiedziałem za co się zabrać po porostu nie umiem obiektowo pisać ;). Przemyśle kod, dzięki ;)

0

pytaj jakbys czegis nieogarnial.pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1