Java İle İlk Projem

ahm1453

Yeni üye
5 Mar 2016
29
0
yok
İlk yaptığım sayı tahmin oyununun kodlarını buldum paylaşmak istedim :)

Kod:
import java.util.Random;
import java.util.Scanner;

public class OyunMain {
	public static **** main(String[] args) {
		Random rnd = new Random();
		Scanner scn = new Scanner(System.in);
		
		System.out.println("Kaç tahmin hakkı istersiniz?");
		int hakSayi = scn.nextInt();
		
		System.out.println("1- kaç arası tahmin istediğinizi giriniz");
		int maksSinir = scn.nextInt();
		
		int randomSayi = rnd.nextInt(maksSinir)+1;
		
		int tahmin = 0;
		int i = 0;
		for(i=1;i<= hakSayi;i++) {
			System.out.println(i+". tahmininiz!");
			tahmin = scn.nextInt();
			
			if(tahmin < randomSayi) System.out.println("Daha yüksek bir sayı giriniz");
			else if(tahmin > randomSayi) System.out.println("Daha küçük bir sayı giriniz");
			else if(tahmin == randomSayi) {Kazandin(i); break;}
		}
		if  (i == hakSayi+1) {
			System.out.println("Yeniden oynamak ister misin? ");
			System.out.println("Evet - 1, Hayır - 2");
			int k = scn.nextInt();
			if(k ==1 ) {
				System.out.println("\n\n\n\n\n\n");
				main(null);
			}
			else if(k==2) System.out.println("\n\n\n\n\nİyi günler!");
			
			else {
				System.out.println("Lütfen geçerli bir sayı giriniz!");
			}
		}


		
	}

	private static **** Kazandin(int kachak) {
		System.out.println("\n\n\n\n\n");
		System.out.println("TEBRİKLER!" + kachak + ". hakkınızda kazandınız");
		System.out.println("Yeniden oynmak ister misiniz ?");
		System.out.println("Evet - 1, Hayır - 2");
		Scanner scn = new Scanner(System.in);
		int i = scn.nextInt();
		
		if(i ==1 ) {
			System.out.println("\n\n\n\n\n\n");
			main(null);
		}
		else if(i==2) System.out.println("\n\n\n\n\nİyi günler!");
		
		else {
			System.out.println("Lütfen geçerli bir sayı giriniz!");
		}
	}
	
}
 

rareg

Katılımcı Üye
22 Mar 2018
661
0
🆁
Gerçekten sen kodladıysan tebrik ederim :)
 
Moderatör tarafında düzenlendi:

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
4
390
Ankara
Geçerli işlem girmediklerinde programdan çıkıyor :D... Kazandın fonksiyonu içinde geçerli işlem seçilene kadar süren bir while döngüsü olmalıydı...

Ufacık bir sorun daha var; alışkanlık haline gelirse ilerde başına bela açar. Kişi her kazandığında "Kazandın" fonksiyonu çağrılıyor, o da main fonksiyonunu geri çağırıyor.

Normalde bu kod bilgisayar tarafından işlenirken, yazdığın her fonksiyon bir "routine"e dönüştürülür. Bilgisayar hangisine gitti, bittiğinde hangisine dönecek hatırlamak için bir stack - yığın içinde bunların adreslerini tutar. Kullanıcı her kazandığında ve tekrar oynamak istediğinde, sen oraya iki tane adres yazdırıyorsun, ama aslında programında aynı noktaya dönüyorsun.

Yani bir süre devam ettiğini düşünelim; bilgisayarın diyor ki: "şimdi main'deyim, bitince kazandın'a döneceğim, o bitince main'e, o bitince kazandın'a, o bitince main'e.......".. Her devam edilen oyun için 16 byte hafızayı gereksiz yere kaybediyorsun. Yeterli miktarda bu durum devam ederse "Stack Overflow" hatası verecek.

Tabii stack boyutu, ezbere bilmesem de bir kaç mb'tır.. Hani tabii 16 byte 16 byte bu oyunun binlerce kez oynanması gerekir. Ama alışkanlık haline getirirsen, ciddi programlarında sebepsiz çökmeler yaşarsın. While döngülerini çalış üstad. Bir şey tek bir koşul harici tekrar tekrar çalışacaksa bunu "while" ile yaparsın.
 

BufGix

Uzman üye
7 Ağu 2015
1,089
2
Phobos/Space
Geçerli işlem girmediklerinde programdan çıkıyor :D... Kazandın fonksiyonu içinde geçerli işlem seçilene kadar süren bir while döngüsü olmalıydı...

Ufacık bir sorun daha var; alışkanlık haline gelirse ilerde başına bela açar. Kişi her kazandığında "Kazandın" fonksiyonu çağrılıyor, o da main fonksiyonunu geri çağırıyor.

Normalde bu kod bilgisayar tarafından işlenirken, yazdığın her fonksiyon bir "routine"e dönüştürülür. Bilgisayar hangisine gitti, bittiğinde hangisine dönecek hatırlamak için bir stack - yığın içinde bunların adreslerini tutar. Kullanıcı her kazandığında ve tekrar oynamak istediğinde, sen oraya iki tane adres yazdırıyorsun, ama aslında programında aynı noktaya dönüyorsun.

Yani bir süre devam ettiğini düşünelim; bilgisayarın diyor ki: "şimdi main'deyim, bitince kazandın'a döneceğim, o bitince main'e, o bitince kazandın'a, o bitince main'e.......".. Her devam edilen oyun için 16 byte hafızayı gereksiz yere kaybediyorsun. Yeterli miktarda bu durum devam ederse "Stack Overflow" hatası verecek.

Tabii stack boyutu, ezbere bilmesem de bir kaç mb'tır.. Hani tabii 16 byte 16 byte bu oyunun binlerce kez oynanması gerekir. Ama alışkanlık haline getirirsen, ciddi programlarında sebepsiz çökmeler yaşarsın. While döngülerini çalış üstad. Bir şey tek bir koşul harici tekrar tekrar çalışacaksa bunu "while" ile yaparsın.

Recursive pismanliktir :(
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.