Jump to content
ghaldszar

Temel Seviye Java Sorularım

Öne çıkan mesajlar

§ 19 Oca 2022, 19:11

Merhaba

 

Sorularım var, kafamda bir sürü sorum var. Java hakkında.

Benim içinden çıkamadığım özde temel seviye sorular.

Başlıyorum. Umarım yardımcı olan meraklılar çıkar.

 

Bir konuda hernagi bir seçeneği seçince bir şey yaptırabiliyoruz.

Mesela

"Oyun oynayalım mı?"

sorusuna E harfine basarsan oyuna giriş yapmak H tuşuna basarsan oyundan ya da programdan dışarı çıkmak mümkün. Peki E ya da H harfi dışında bir tuşa basarsak tekrardan başa, soruya, yani

"Oyun oynayalım mı?"

sorusuna nasıl dönebiliriz?

Aslında ikisini de çeşitli farklı statement şekilleri kullarak yapabildim ama ikisini tek bir yerde birleştiremedim.

Mesela WHILE ile:

public static void main(String[] args) {
        
    Scanner input = new Scanner(System.in);

    System.out.println("DO YOU WANT TO PLAY (Y / N) : ");
    
    char choice = input.next().charAt(0);

    while (choice != 'Y' && choice != 'y' && choice != 'N' && choice != 'n') {
        System.out.println("You have entered an invalid entry. Try Again.");
        System.out.println("DO YOU WANT TO PLAY (Y / N) : ");
        
        choice = input.next().charAt(0);

    }

    if (choice == 'Y') {
        System.out.print("Let's Play");
    }
    else if (choice == 'N') {
        System.out.println("Byeee.");
    }



}

Burada sondaki if ve else problemli tabii

ya da SWITCH ile;

public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
			System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
			char choice = input.next().charAt(0);

    	 switch (choice) {
            case 'Y':
            case 'y':
                System.out.println( "Let's Go" );
                break;
            case 'N':
            case 'n':
                System.out.println( "BYEEEEE......." );
                break;
            default:
                System.out.println( "Wrong Key" );
                System.out.print( "DO YOU WANT TO PLAY (Y / N) : " );
                
				?????????
                
                
        }


    }
}

???????? olan yere ne koyacağım bilemedim. Oraya bir şey koymakla olmayacak tabii.

Basic mi bu

20 GOTO 10

yazınca başa dönsün.

 

Burada bir mantık hatası yapıyorum ama onu bir türlü bulamadım. Statement konusunda bir çok eğitim videosu izledim ama bir şeyi gözden kaçırıyorum sanırım.

ghaldszar tarafından düzenlendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 19:37
25 dakika önce, ghaldszar dedi ki:

Burada sondaki if ve else problemli tabii

if 

elseif

koymussun ama

else koymamisisn

if ve elseif disindaki conditionlar else e duser
orda da istedigin gibi handle edebilrsin condition'i

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 19:44
import java.util.Scanner;

public class MyClass {
    public static void main(String args[]) {
  
    Scanner input = new Scanner(System.in);

    System.out.println("DO YOU WANT TO PLAY (Y / N) : ");
    
    char choice = input.next().charAt(0);
    
    while(true) {
        System.out.println("DO YOU WANT TO PLAY (Y / N) : ");
        
        if (choice == 'Y') {
            System.out.print("Let's Play");
            break;
        }
        else if (choice == 'N') {
            System.out.println("Byeee.");
            break;
        }
        else {
            System.out.print("Enter Y or N plzzzz\n");
            choice = input.next().charAt(0);
        }
    }

    }
}

gibi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 19:49
else {
      choice = input.next().charAt(0);
      }

@senko

Bunu ekle diyorsun yani

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 19:53

direk kendi koduna eklersen yalniz, hicbir zaman else e dusmez, cunku ben atiyorum 'A' girersem while loop icinde kalicam. cunku while condition'i saglanmadigindan yine while icine giricez.

daha dogrusu senin kodda else e duserim ama sadece 'y' ve 'n' girersem duserim, o da istedigin durum degil.

 

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 20:16

Eğer bu şekilde yaparsam

yani sadece IF-ELSEIF-ELSE şeklinde kurarsam:

public static void main(String[] args) {
    	Scanner input = new Scanner(System.in);

        System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
        
        
        char choice = input.next().charAt(0);

    	if (choice == 'Y' || choice == 'y') {
            System.out.println( "Let's Go" );
        }
        else if (choice == 'N' || choice == 'n') {
            System.out.println( "BYEEEEE......." );
        }
        else {
            System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
            choice = input.next().charAt(0);
        }


    }

O zaman Y ve N durumlarda çalışıyor. Fakat farkli harf girdiğimde sadece bir kez dönüyor.

 

Daha önce yazdğım kodun sonuna ekleme yaparsam;

public static void main(String[] args) {
            
        Scanner input = new Scanner(System.in);

        System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
 
        char choice = input.next().charAt(0);

        while (choice != 'Y' && choice != 'y' && choice != 'N' && choice != 'n') {
            System.out.println("You have entered an invalid entry. Try Again.");
            System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
            choice = input.next().charAt(0);
    
        } if (choice == 'Y') {
            System.out.println("Let's Go");
        }
        else if (choice == 'N') {
            System.out.println("BYEEEE......");
        }
        else {
            choice = input.next().charAt(0);
        }

      
    }

Doğru çalışıyor gözüküyor.

En manıklı yazma/kurma şekli bu mu? Ya da ne ile kurmak daha doğru ne yoldan çözmeye çalışayım?

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 20:32

ilkinin else e dusmesi normal, cunku bir while dongusu icinde degil

ikincisinde ise else e hic dusmuyor, (kucuk y ve kucuk n disinda) cunku eger Y girersen while dan cikiyor progrma cunku kosul saglanmis, ilk if e giriyor bakiyor Y == Y if e girip programi bitiriyor

ama ufak n gir mesela, o zaman yine kosul saglanicak while icin, ama if ve else e girmeyecek cunku sadece capital harflere bakiyor, o zaman else e dusucek. Bu da istedigin durum degil.

benim kod'a bak, while(true) ile devamli while icinde duruyorum, ancak sen Y ve N girersen cikiyorum. diger duumlarda hep while icindeyim.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 21:23
52 dakika önce, senko dedi ki:
import java.util.Scanner;

public class MyClass {
    public static void main(String args[]) {
  
    Scanner input = new Scanner(System.in);

    System.out.println("DO YOU WANT TO PLAY (Y / N) : ");
    
    char choice = input.next().charAt(0);
    
    while(true) {
        System.out.println("DO YOU WANT TO PLAY (Y / N) : ");
        
        if (choice == 'Y') {
            System.out.print("Let's Play");
            break;
        }
        else if (choice == 'N') {
            System.out.println("Byeee.");
            break;
        }
        else {
            System.out.print("Enter Y or N plzzzz\n");
            choice = input.next().charAt(0);
        }
    }

    }
}

gibi

Ben senin kodu yeni gördüm, onu atlamışım. Tariflerinden anladığım kadarıyla uğraşıyorum bir taraftan diğer taraftan da en mantıklı yolu soruyorum. Kafa yoruldu mu ne?

Şimdi biraz kurcaladım çalışırken bir sıkıntı oluyordu orada bir düzeltme yaptım.

Son hali şöyle:

public static void main(String args[]) {
  
    Scanner input = new Scanner(System.in);

    System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
    
    char choice = input.next().charAt(0);
    
    while(true) {
        //System.out.print("DO YOU WANT TO PLAY (Y / N) : ");  <---- BURADAKİNİ AŞAĞIYA ALDIM.
        
        if (choice == 'Y' || choice == 'y') {
            System.out.println("Let's Play");
            break;
        }
        else if (choice == 'N' || choice == 'n') {
            System.out.println("Byeee.");
            break;
        }
        else {
            System.out.print("Enter Y or N plzzzz\n");
            System.out.print("DO YOU WANT TO PLAY (Y / N) : "); // <---- BURAYA ALDIM
            choice = input.next().charAt(0);
        }
    }

    }

Değişikliğin nedeni şu:

spacer.png

Burada çıktısı göründüğü gibi Y ya da N verirsek tekrardan soruyu sorarak cevabı veriyordu.

Yanlış bir cevap verirsek yine soruyu sorarak Enter Y or N plzzz diyordu.

Neyse orası o kadar önemli değil konunun özünde kurguyu anladım.

While kurgusu içerisinde IF-ELSEIF-ELSE kurgusu yapmak mantığını anladım.

Fakat takıldığım bir nokta var.

Bu kodda, yani benim yazdığım koddaki en son durumda:

public static void main(String[] args) {
    	Scanner input = new Scanner(System.in);

        System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
 
        char choice = input.next().charAt(0);

        while (choice != 'Y' && choice != 'y' && choice != 'N' && choice != 'n') {
            System.out.println("You have entered an invalid entry. Try Again.");
            System.out.print("DO YOU WANT TO PLAY (Y / N) : ");
            choice = input.next().charAt(0);
    
        } if (choice == 'Y' || choice == 'y') {
            System.out.println("Let's Go");
        }
        else if (choice == 'N' || choice == 'n') {
            System.out.println("BYEEEE......");
        }
        else {
            choice = input.next().charAt(0);
        }

      
    }

Bu kodu da denediğimde çalışıyor. Gayet de düzgün çalışıyor gözüküyor. Senin yazdığın kodu anladım mantığını da anladım mantıklı görünüyor. Bana kalsa senin yazdığını tercih ederim bana daha mantıklı görünüyor.

Fakat Kendi yazdığım da gayet güzel çalışıyor gibi görünüyor. Nerede sıkıntı olabileceğini anlamadım ben galiba.

İnsan kendi yazdığı kodu anlamaz mı? Benim gibi şans eseri yazarsa anlamayabilir tabii :))))

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 19 Oca 2022, 21:37

Şimdi anlatmaya çalışacağım olup olmadığını sen söylersen sevinirim @senko

Senin yazdığında bir while döngüsü var true olduğu sürece bu döngünün içinde kal diyip Y ise Lets Go yaz N ise Bye yaz diğerlerinde choice girişi yap diyorsun. While döngüsünden çıkmanın yolu Y veya N harfine basmak.

Benim yazdığımda önce while döngüsüne girip bakıyor eğer girilen değer Y ve N değilse bu değerlerden biri girilene kadar chice girişi yap diyor. Y veya N girilince if statement devreye giriyor. Y yazılırsa Lets go N girilirse Bye yazıyor. Fakat burada aslında ELSE IF durumu gereksiz. Zaten While içerisinde Y ve N dışındaki alternatifleri elediğimizden Y girişini lets go yazmaya yönlendirdikten sonra ister ELSE IF ile N girişini Byeee yazmaya yönlendiririz istersek direk ELSE ile -zaten geriye sadece N kalacağından- Byeee demeye yönlendirebiliriz.

Mantıkta hata var mı?

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 20 Oca 2022, 12:30
14 saat önce, ghaldszar dedi ki:

akat burada aslında ELSE IF durumu gereksiz. Zaten While içerisinde Y ve N dışındaki alternatifleri elediğimizden Y girişini lets go yazmaya yönlendirdikten sonra ister ELSE IF ile N girişini Byeee yazmaya yönlendiririz istersek direk ELSE ile -zaten geriye sadece N kalacağından- Byeee demeye yönlendirebiliriz.

yok burda dogrusun. While dan cikmis olmak icin y Y n N olmasi lazim variable'in, zaten sen bu durumlari da if ve elseif de yakaliyorsun, while dan cikinca senin istemedigin bir char olma durumunu eledin zaten.

oyle aman aman bir sikinti yok kulagi biraz ters tutmussun o kadar🙂

anladigim kadari ile yenisin daha, simdiden lan en iyi yolu bu mu diye cok dusunme, istedigini veriyorsa program ve execution flow'u anladiysan okey. Yavas yavas basliyacaksin zaten hangi patternlari hangi anti-patternlari kullanip kullanmaman gerektigini.

 

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 24 Oca 2022, 13:08

Bu kodu fonksiyonlara bölsen daha rahat iş yaparsın sanırım. Bi tane askPlayGame() methodu ekleyip olumsuz koşul vb. oluştukça onu tekrar çağırsan iş biter gibi :). Bence while ile kasmak biraz yorucu burda hehe

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 24 Oca 2022, 19:09

syntaxdan adamın methodlara gelmediği belli mantığı anlamak için böyle ilerlemesi daha güzel başarılar karşim 👍

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 01 Şub 2022, 19:33
On 24.01.2022 at 16:08, elesso dedi ki:

Bu kodu fonksiyonlara bölsen daha rahat iş yaparsın sanırım. Bi tane askPlayGame() methodu ekleyip olumsuz koşul vb. oluştukça onu tekrar çağırsan iş biter gibi :). Bence while ile kasmak biraz yorucu burda hehe

Çok zor olmayacaksa bir örnek verir misin?

On 24.01.2022 at 22:09, ad3m dedi ki:

syntaxdan adamın methodlara gelmediği belli mantığı anlamak için böyle ilerlemesi daha güzel başarılar karşim 👍

Methodlara geldim aslında ama sıkıntılar çıktı geri döndüm. Başka bir eğitim videosu ile tekrar baştan başladım. Bu sorduğum soru da kendi kendime yazmaya çalıştığım, yazdıkça da içine abuk subuk şeyler eklemek için uğraştığım bu yolla kendimi denediğim bir sayı tahmin oyununun parçası. Kenidmi test ediyorum bir nevi.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 01 Şub 2022, 20:55

En güzel öğrenme şekli o zaten. Öğrendiklerinin tümünü sıkılmayacağın basit projeler ile iliştirip kullanmak. Hem tekrar edip hafızaya alıyorsun hem de bir şeyler başarabildiğin için motivasyon oluyor.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 09 Kas 2022, 12:46

Çok boşlamışım burayı hemen temel seviyede bir soru sorayım:

String bir değişken initialize etmem gerektiğinde ama daha değeri belli değilse hangisi daha mantıklı?

String degisken = "";

String degisken = null;

İkisi arasında ne fark var?

 

Böyle bir meme var aslında bayaa bir şey anlatıyor ama :)spacer.png

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 09 Kas 2022, 12:52

javacı değilim ama a = b yaptığında, b null ise patlatabilir mi? Primitif bi değişkeni nullemeye ne gerek var? = null yasaklansın dfsfgd

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş
§ 09 Kas 2022, 13:49

String'i 2 sekilde initialize edebilirsin, null ve herhangi bir String degeri vermek (bos string "" buna dahil)

Eger Class'in member variable'i ise JVM defualt null degeri verir. Ne demek istiyorum;

class MyStringOperations {
	private String stringAsClassMemberVariable;
  
  	public void printSomething() {
      	String stringAsMethodMemberVariable;
      
    	System.Out.println(stringAsClassMemberVariable); // prints null
      	System.Out.println(stringAsMethodMemberVariable); // you'll get a compiler error, local variable'lar otomatik init edilmez.
    }
}

Bu yuzden stringAsMethodMemberVariable'i 

String stringAsMethodMemberVariable = null; 

diye belirtmen lazim.

null ile empty string arasindaki fark ise, null variable'da variable'in memory pointer'i bir adress gostermez, null dir bostur yani, sadece string variable'nin pointer'i icin memory harcanir o da 64bit JVM'de 8byte. Diger taraftan bos string yer kaplar heap'te, cunku String (ve diger Tum non-primitive type'lar) Object'ten inherit olduklari icin, Object class'inin bir overhead'i vardir, ayrica String class'inin da init'te bir overhead'i vardir. Muthemelen "" yani bos string icin 40-56 byte harcanir memory'de.

 

senko tarafından düzenlendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Yorum yazmak için üye olun veya giriş yapın

Yorum yazmak için üye olmanız lazım

Üye ol

Kayıt olun ve aramıza katılın!

Yeni bir hesap oluştur

Giriş yap

Zaten üyemiz misin? O halde giriş yap

Hemen giriş yap

Yasal Duyuru

5651 sayılı kanun kapsamında, Paticik.com, işbu sayfadaki mesajların ve içeriğin Yer Sağlayıcısıdır. Yayınlanan içeriklerden doğabilecek her türlü sorumluluk içeriği üreten kullanıcıya aittir. Şikayet ve talepleriniz için buraya tıklayıp bize ulaşabilirsiniz. Alternatif olarak [email protected] e-posta adresinden bize ulaşabilirsiniz.

×
×
  • Yeni Oluştur...