Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Temel Seviye Java Sorularım


ghaldszar

Öne çıkan mesajlar

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
Link to comment
Sosyal ağlarda paylaş

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

Link to comment
Sosyal ağlarda paylaş

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.

 

Link to comment
Sosyal ağlarda paylaş

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?

Link to comment
Sosyal ağlarda paylaş

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.

Link to comment
Sosyal ağlarda paylaş

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 :))))

Link to comment
Sosyal ağlarda paylaş

Ş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ı?

Link to comment
Sosyal ağlarda paylaş

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.

 

Link to comment
Sosyal ağlarda paylaş

  • 2 hafta sonra ...
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.

Link to comment
Sosyal ağlarda paylaş

  • 9 ay sonra ...

Ç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

Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

  • 2 ay sonra ...

selam, bende java ögrenmeye başladım. iyi güzel online kursları falan dinliyorum ediyorum ama pratik yapma konusunda eksiğim var. nette java quiz falan diye aratınca çok hardcore sorular geliyor. yeni başlayanlar için böyle test olsun soru çözmece olsun kaynak ne var acaba. nerden nasıl öğreneyim bana balıkta verin balık tutmayı da ögretin

Link to comment
Sosyal ağlarda paylaş

  • 3 hafta sonra ...
×
×
  • Yeni Oluştur...