CodeBlanks Logo Icon CodeBlanks

Birleştirme

Menü döngüsüyle CLI uygulaması yazarsın.

Birleştirme: komut döngüsü

Son adımda tüm parçaları birleştirip bir komut döngüsü kuracağız. Komutlar bir String[] olarak gelir; her biri ya add:X ya list ya da done:N biçimindedir.

for (String cmd : commands) {
  if (cmd.startsWith("add:")) {
    list.addTask(cmd.substring(4));
  } else if (cmd.equals("list")) {
    list.listTasks();
  } else if (cmd.startsWith("done:")) {
    int idx = Integer.parseInt(cmd.substring(5));
    list.completeTask(idx);
  }
}

substring(4) ile başlığı, Integer.parseInt ile indeksi çıkarırız. Bu yapı, gerçek bir menü döngüsünün iskeletidir; kullanıcıdan girdi almayı ileride göreceğiz.

Projeyi bütünleştirme

Bu derste tüm metotları (Task, TodoList, addTask, listTasks, completeTask) bir araya getirdik. Komut döngüsü, kullanıcı girdisini taklit eden bir dizi üzerinde çalışır.

Gerçek bir CLI uygulamasında komutlar String[] args ya da Scanner ile okunur. Scanner'ı bir sonraki grupta göreceksin; o zaman bu iskeleti canlı kullanıcı girdisine bağlayabilirsin.

Şimdi senden bu döngüyü yazmanı istiyoruz: komutları sırayla işle, her birini ilgili metoda yönlendir.

Uygulama Komut döngüsünü yaz

main içindeki commands dizisini for-each ile gez. Her komut için: add:X ise list.addTask(cmd.substring(4)), list ise list.listTasks(), done:N ise list.completeTask(Integer.parseInt(cmd.substring(5))) çağır.

Başlangıç kodu

Main.java
import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    TodoList list = new TodoList();
    String[] commands = {"add:Alışveriş", "add:Ödev", "list", "done:0", "list"};
    // Komutları sırayla işle: add:X, list, done:N
  }
}

class Task {
  String title;
  boolean done;
  Task(String title) {
    this.title = title;
    this.done = false;
  }
  public String toString() {
    return (done ? "[x] " : "[ ] ") + title;
  }
}

class TodoList {
  ArrayList<Task> tasks = new ArrayList<>();
  void addTask(String title) {
    tasks.add(new Task(title));
  }
  void listTasks() {
    for (Task t : tasks) {
      System.out.println(t);
    }
  }
  void completeTask(int index) {
    tasks.get(index).done = true;
  }
}

Örnek çözüm

Main.java
for (String cmd : commands) {
  if (cmd.startsWith("add:")) {
    list.addTask(cmd.substring(4));
  } else if (cmd.equals("list")) {
    list.listTasks();
  } else if (cmd.startsWith("done:")) {
    int idx = Integer.parseInt(cmd.substring(5));
    list.completeTask(idx);
  }
}

Beklenen çıktı

[ ] Alışveriş
[ ] Ödev
[x] Alışveriş
[ ] Ödev

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boşluğu doldur: komut türünü bul

Soru
if (cmd.____("add:")) {
  list.addTask(cmd.substring(4));
}
Cevap
if (cmd.startsWith("add:")) {
  list.addTask(cmd.substring(4));
}

Açıklama: cmd.startsWith("add:") ile önek kontrol edilir.

2 Integer.parseInt(cmd.substring(5)) ne yapar?

  • Bir hata fırlatır
  • "done:" önekini kaldırır
  • cmd'i 5'e böler
  • "done:0"'dan 0 sayısını çıkarır Doğru cevap

Açıklama: substring(5) "0" verir, parseInt onu int'e çevirir.

3 Komut ve eylemi eşleştir

Kavram Anlamı
add:Alışveriş Yeni görev ekle
list Görevleri yazdır
done:0 İlk görevi tamamla
done:1 İkinci görevi tamamla

Başlangıç bölümündeki tüm dersler