Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Błąd w działaniu gierki
05-11-2013, 05:02 PM (Ten post był ostatnio modyfikowany: 05-11-2013 05:03 PM przez java.)
Post: #1
Błąd w działaniu gierki
import java.util.Random;
import java.util.Scanner;

public class Gra {
public static void main(String[] args){
int losowana,liczba,ilosc,ponownosc,max;
int[] tablica = new int[100];
liczba=0;
ponownosc=1;
Random losowanie = new Random();
Scanner podawanie = new Scanner(System.in);
losowana = losowanie.nextInt(101);
System.out.println("Witamy w grze! Gra losuje liczbe z przedzialu 1 - 100 a ty musisz ja zgadnac. Wpisz liczbe, a program napisze czy liczba jest za duza czy za mala. Na koncu mozna zobaczyc ilosc prob.");
ilosc = 0;

max = 0;
while(ponownosc==1){
tablica[0]=0;
liczba = 1;
while(losowana != tablica[liczba]){
System.out.println("Podaj liczbe: ");
System.out.println(+losowana);//Nie chce mi sie ciagle zgadywac liczby, wiec dalem by mi wyswietlalo
tablica[ liczba ] = podawanie.nextInt();
while(tablica[liczba]>=101||tablica[liczba]<=0){
System.out.println("Niepoprawna liczba. Podaj jeszcze raz");
tablica[liczba] = podawanie.nextInt();
}
ilosc = ilosc + 1;
if(tablica[liczba]>losowana){
System.out.println("Za duza.");
}
if(tablica[liczba]<losowana){
System.out.println("Za mala.");
}

if(tablica[liczba-1]<tablica[liczba]){
max = tablica[liczba];
liczba++;
}
else{
max=tablica[liczba-1];
liczba++;
}
}
System.out.println("Poprawna liczba");
System.out.println("Ilosc prob: "+ilosc);
System.out.println("Najwieksza liczba: +max");
ilosc = 0;
losowana = losowanie.nextInt(100);
System.out.println("Czy ponowic gre?\n1 - tak\n2 - nie");
ponownosc = podawanie.nextInt();
}
}
}
Program się kompiluje ale problem jest z tym że nie działa jak powinien. Chyba nie wychodzi z pętli ponieważ gdy podaje poprawną liczbe to powinien przejść dalej. Pomoże ktoś?
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
05-13-2013, 06:23 AM
Post: #2
RE: Błąd w działaniu gierki
1.
Kod:
losowana = losowanie.nextInt(101);
losuje Ci liczbę z przedziału 0-100, jak wylosujesz 0 to nie wyjdziesz z pętli, nawet jak je podasz. Jak chcesz mieć wylosowaną liczbę z przedziału 1-100 zastosuj:
Kod:
losowana = losowanie.nextInt(100) + 1;

2.
Kod:
int[] tablica = new int[100];
Robisz tablicę indeksowaną numerami z przedziału [0, 99]. Jak wyjdziesz za zakres (ponad 100 prób, przecież liczby mogą się powtarzać) to też będziesz miał problem - rozwiąż to jakoś, sposobów jest wiele ;]. I nie rozumiem tego:
Kod:
tablica[0]=0;
liczba = 1;

Jeszcze co najmniej paru rzeczy można się przyczepić, jednak jeśli chodzi o błąd, który powoduje brak zatrzymania pętli, to jest to:
Kod:
while(losowana != tablica[liczba]){
// [...]
if(tablica[liczba-1]<tablica[liczba]){
                    max = tablica[liczba];
                    liczba++;
                } else {
                    max=tablica[liczba-1];
                    liczba++;
                }
// [...]
Daje to tak naprawdę taki efekt, że przy każdym obiegu pętli porównujesz liczbę losowaną do " tablica[liczba + 1] ", która jako że nie została jeszcze wczytana jest domyślnie równa 0. Przy tak prostych programach, polecam zapisać sobie na kartce po kolei listę kroków, które wykonuje Twój kod, o wiele szybciej znajdziesz błąd.

PS. Używaj [ code]kod programu[/ code] , bo ciężko się czyta w tej postaci, nie dziw się ludziom, że omijają Twój wątek.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości