[{"data":1,"prerenderedAt":347},["ShallowReactive",2],{"tag-labels":3,"site-header":4,"article-sistem-input-pada-bahasa-java-id":72},{},{"featuredPost":5,"navigations":29},{"id":6,"title":7,"title_en":8,"slug":9,"excerpt":10,"excerpt_en":11,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":16,"thumbnail_image":21,"og_image":22,"series":23,"authors":28},110,"Ketika Pilih Framework Cuma Biar Kelihatan Beda","When You Pick a Framework Just to Look Different","ketika-pilih-framework-cuma-biar-kelihatan-beda","Terakhir kali kamu milih framework atau library baru, itu karena masalahmu butuh alat itu, atau karena alatnya kedengaran keren dan belum banyak yang pakai? Pertanyaan ini nggak enak dijawab. Soalnya keputusan teknologi sering diambil dengan alasan yang nggak pernah ditulis di dokumen teknis mana pun.","The last time you chose a new framework or library, was it because your problem needed that tool, or because it sounded cool and few people around you were using it? That question is uncomfortable. Technology decisions are often made for reasons that never appear in any technical document.",true,"2026-10-06T15:25:21.000Z",5,false,[17,18,19,20],"karier","framework","opini","pengalaman",null,"\u002Fog\u002Fketika-pilih-framework-cuma-biar-kelihatan-beda.png",{"id":24,"title":25,"title_en":26,"slug":27},9,"Artikel","Articles","all",[],[30,46,67],{"collection":31,"item":32},"series",{"__typename":31,"title":25,"title_en":26,"slug":27,"children_series":33},[34,38,42],{"title":35,"title_en":36,"slug":37},"Kecerdasan Artifisial","Artificial Intelligence","kecerdasan-artifisial",{"title":39,"title_en":40,"slug":41},"Konsep Dasar Pemrograman","Programming Fundamentals","konsep-dasar-pemrograman",{"title":43,"title_en":44,"slug":45},"Algoritma dan Struktur Data","Algorithms and Data Structures","algoritma-struktur-data",{"collection":31,"item":47},{"__typename":31,"title":48,"title_en":48,"slug":49,"children_series":50},"Tutorial","tutorial",[51,55,59,63],{"title":52,"title_en":53,"slug":54},"Belajar Python","Learning Python","belajar-python",{"title":56,"title_en":57,"slug":58},"Belajar Golang","Learning Go","belajar-golang",{"title":60,"title_en":61,"slug":62},"Belajar Java","Learning Java","belajar-java",{"title":64,"title_en":65,"slug":66},"Belajar Pascal","Learning Pascal","belajar-pascal",{"collection":31,"item":68},{"__typename":31,"title":69,"title_en":69,"slug":70,"children_series":71},"Lab","lab",[],{"article":73,"renderedBody":228,"renderedTakeaway":229,"latestArticles":230,"toc":330},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":81,"hidden_from_listing":15,"tags":82,"thumbnail_image":21,"og_image":86,"series":87,"authors":221,"body_locale":224,"available_locales":225,"body":227,"takeway":21,"prerequisite":21},55,"Sistem Input pada Bahasa Java","The Input System in the Java Language","sistem-input-pada-bahasa-java","Pada bahasa Java, sistem input dilayani oleh objek yang bernama Scanner. Objek ini memiliki banyak method yang dapat digunakan untuk sistem input.","In Java, the input system is handled by an object named Scanner, and that object has plenty of methods you can use for input.","2022-09-27T14:15:59.000Z",7,[83,84,85],"java","input-output","dasar","\u002Fog\u002Fsistem-input-pada-bahasa-java.png",{"id":88,"title":89,"title_en":90,"slug":91,"description":92,"description_en":93,"articles":94,"children_series":210,"parent_series":211},21,"Berkenalan dengan Java","Getting Started with Java","java-intro","Kenalan sama Java dari nol: bikin program pertama, paham struktur dasarnya, sampai bisa nerima input dan nampilin output.","Meet Java from scratch: your first program, how the pieces fit together, and how to read input and print output.",[95,109,130,143,160,176,190,205],{"id":96,"title":97,"title_en":98,"slug":99,"excerpt":100,"excerpt_en":101,"has_translation":12,"published_at":102,"reading_time":14,"hidden_from_listing":15,"tags":103,"thumbnail_image":21,"og_image":106,"series":107,"authors":108},14,"Instalasi Java dengan Visual Studio Code","Installing Java with Visual Studio Code","instalasi-java-dengan-visual-studio-code","Mau belajar ngoding Java tapi spek laptop pas-pasan buat buka IDE berat? Yuk, cari tahu cara setup VS Code biar ngoding Java tetap lancar dan enteng!","Want to learn Java but your laptop barely handles a heavy IDE? Here's how to set up VS Code so writing Java stays light and smooth.","2026-06-15T02:37:24.974Z",[104,83,105],"howto","editor","\u002Fog\u002Finstalasi-java-dengan-visual-studio-code.png",{"id":88,"title":89,"title_en":90,"slug":91},[],{"id":110,"title":111,"title_en":112,"slug":113,"excerpt":114,"excerpt_en":115,"has_translation":12,"published_at":116,"reading_time":117,"hidden_from_listing":15,"tags":118,"thumbnail_image":21,"og_image":121,"series":122,"authors":123},49,"Berkenalan dengan Bahasa Java","Getting to Know the Java Language","berkenalan-dengan-bahasa-java","Java merupakan bahasa pemrograman tingkat tinggi dengan paradigma OOP. Bahasa ini punya slogan “write once, run anywhere”","Java is a high-level programming language built on the OOP paradigm, and it carries the slogan “write once, run anywhere”.","2022-08-11T00:00:00.000Z",3,[83,119,120,85],"intro","pemrograman","\u002Fog\u002Fberkenalan-dengan-bahasa-java.png",{"id":88,"title":89,"title_en":90,"slug":91},[124],{"authors_id":125},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},1,"Daffa Izzuddin","izzudd","Writer",{"id":131,"title":132,"title_en":133,"slug":134,"excerpt":135,"excerpt_en":136,"has_translation":12,"published_at":116,"reading_time":126,"hidden_from_listing":15,"tags":137,"thumbnail_image":21,"og_image":138,"series":139,"authors":140},50,"Membuat Program \"Hello World\" pada Java","Building a \"Hello World\" Program in Java","membuat-program-hello-world-pada-java","Pada kesempatan kali ini kita akan membuat kode pertama kita, yaitu Hello World pada bahasa Java.","This time we build our first program, Hello World, in the Java language.",[83,49,85],"\u002Fog\u002Fmembuat-program-hello-world-pada-java.png",{"id":88,"title":89,"title_en":90,"slug":91},[141],{"authors_id":142},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":144,"title":145,"title_en":146,"slug":147,"excerpt":148,"excerpt_en":149,"has_translation":12,"published_at":150,"reading_time":151,"hidden_from_listing":15,"tags":152,"thumbnail_image":21,"og_image":155,"series":156,"authors":157},51,"Mengenal Struktur Dasar Program Java","Understanding the Basic Structure of a Java Program","mengenal-struktur-dasar-program-java","Ibarat menulis skripsi, membuat program ternyata juga ada strukturnya. Dan struktur ini harus sesuai supaya tidak ditolak oleh sang komputer.","Writing a program has a structure, the way writing a thesis does. And that structure has to be right so the computer doesn't reject it.","2022-08-12T09:43:57.000Z",4,[83,153,85,154],"syntax","konsep","\u002Fog\u002Fmengenal-struktur-dasar-program-java.png",{"id":88,"title":89,"title_en":90,"slug":91},[158],{"authors_id":159},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":161,"title":162,"title_en":163,"slug":164,"excerpt":165,"excerpt_en":166,"has_translation":12,"published_at":167,"reading_time":117,"hidden_from_listing":15,"tags":168,"thumbnail_image":21,"og_image":171,"series":172,"authors":173},52,"Penulisan Komentar pada Bahasa Java","Writing Comments in the Java Language","penulisan-komentar-pada-bahasa-java","Java memiliki beberapa jenis komentar yaitu komentar satu baris, banyak baris, dan komentar dokumentasi.","Java has several kinds of comments: single line comments, multiline comments, and doc comments.","2022-08-21T03:23:11.000Z",[83,169,153,170],"komentar","best-practice","\u002Fog\u002Fpenulisan-komentar-pada-bahasa-java.png",{"id":88,"title":89,"title_en":90,"slug":91},[174],{"authors_id":175},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":177,"title":178,"title_en":179,"slug":180,"excerpt":181,"excerpt_en":182,"has_translation":12,"published_at":183,"reading_time":14,"hidden_from_listing":15,"tags":184,"thumbnail_image":21,"og_image":185,"series":186,"authors":187},53,"Sistem Output pada Bahasa Java","The Output System in the Java Language","sistem-output-pada-bahasa-java","Ketika membuat program \"Hello World\" kita sudah melihat method `System.out.println`. Selain method tersebut masih ada method lainnya, mari kita bahas.","When we built the \"Hello World\" program we already met the `System.out.println` method. Java has other output methods too, and this piece goes through them.","2022-08-23T00:00:00.000Z",[83,84,85],"\u002Fog\u002Fsistem-output-pada-bahasa-java.png",{"id":88,"title":89,"title_en":90,"slug":91},[188],{"authors_id":189},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":191,"title":192,"title_en":193,"slug":194,"excerpt":195,"excerpt_en":196,"has_translation":12,"published_at":197,"reading_time":81,"hidden_from_listing":15,"tags":198,"thumbnail_image":21,"og_image":200,"series":201,"authors":202},54,"Variabel dan Literal pada Bahasa Java","Variables and Literals in the Java Language","variabel-dan-literal-pada-bahasa-java","Literal dan variabel merupakan komponen yang penting, karena 2 hal ini berhubungan langsung dengan data dan manipulasinya.","Literals and variables are important components, because these 2 things connect directly to data and how you manipulate it.","2022-09-07T07:33:30.000Z",[83,199,154,85],"variabel","\u002Fog\u002Fvariabel-dan-literal-pada-bahasa-java.png",{"id":88,"title":89,"title_en":90,"slug":91},[203],{"authors_id":204},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":81,"hidden_from_listing":15,"tags":82,"thumbnail_image":21,"og_image":86,"series":206,"authors":207},{"id":88,"title":89,"title_en":90,"slug":91},[208],{"authors_id":209},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},[],{"id":212,"title":60,"title_en":61,"slug":62,"parent_series":213,"children_series":214},13,{"id":126,"title":48,"title_en":48,"slug":49},[215,216],{"id":88,"title":89,"title_en":90,"slug":91,"cover_image":21},{"id":217,"title":218,"title_en":219,"slug":220,"cover_image":21},22,"Variabel, Tipe Data, dan Operasi","Variables, Types, and Operations","java-variabel-tipe-data",[222],{"authors_id":223},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},"id",[226,224],"en","Sebelumnya kita telah membahas tentang [sistem output](https:\u002F\u002Fwww.invasikode.com\u002Fsistem-output-pada-bahasa-java). Kita juga sudah membahas tentang [variabel dan literal](https:\u002F\u002Fwww.invasikode.com\u002Fvariabel-dan-literal-pada-bahasa-java). Tetapi, sejauh ini program yang kita buat masih begitu-begitu saja. Satu arah, hanya menampilkan output tanpa ada sesuatu yang interaktif.\n\nSalah satu cara yang bisa dilakukan untuk membuat program kita lebih interaktif adalah dengan menggunakan sistem input.\n\nBagaimana cara membuat sistem input pada Java, dan apa yang bisa kita lakukan dengan ini? mari kita bahas lebih lanjut.\n\n## Sekilas tentang Sistem Input dan Scanner\n\nSistem input, adalah perintah yang kita gunakan untuk memerintahkan komputer mengambil masukan dari pengguna.\n\nSecara umum, masukan ini bisa berupa ketikan keyboard, klik mouse, sentuhan layar, dan lain sebagainya.\n\nWalaupun ada banyak cara melakukan input, fokus kita kali ini cukup inputan dari ketikan user saja. Jadi kita akan coba membaca ketikan user pada layar terminal dan memasukkannya pada sebuah variabel.\n\nPada bahasa Java, sistem input dilayani oleh objek yang bernama `Scanner`. Objek ini sudah tersedia dan bisa kita gunakan dengan melakukan import library terlebih dahulu, yaitu `java.util.*` atau `java.util.Scanner`.\n\n> **Library** merupakan koleksi kode yang sudah sudah dituliskan, sehingga kita tidak perlu lagi menulis kode dari awal untuk melakukan hal-hal sepele seperti sistem input ini.\n\nDalam inisialisasinya, objek `Scanner` harus memiliki sumber input sebagai argumennya. Karena kali ini kita mengambil inputan dari terminal, maka argumen yang diberikan adalah `System.in`.\n\nUntuk lebih jelasnya tentang `Scanner`, bisa kalian coba ketik dan jalankan kode berikut:\n\n```java\nimport java.util.Scanner;  \u002F\u002F import Scanner\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);  \u002F\u002F inisialisasi objek scanner\n    System.out.print(\"Masukkan nama: \");\n    String nama = scanner.nextLine();          \u002F\u002F membaca inputan dari keyboard\n    System.out.println(\"Halo \" + nama);        \u002F\u002F output hasil inputan\n  }\n}\n```\n\nKetika program dijalankan, maka program akan berhenti pada tulisan `Masukkan nama:`. Ini karena ketika kita panggil `scanner.nextLine()` program akan menunggu inputan dari user.\n\nSelanjutnya coba ketikkan sebuah nama, misal \"Inva\" lalu tekan tombol enter. Nantinya akan keluar outputan **\"Halo Inva\"**. Lengkapnya seperti ini:\n\n```\nMasukkan nama: Inva\nHalo Inva\n```\n\nPada contoh tersebut kita telah menggunakan method `nextLine`. Method ini berfungsi untuk mengambil inputan yang bertipe `String` alias huruf atau kumpulan huruf.\n\nBiasanya terjadi salah paham antara `Scanner` dan `scanner`. Walaupun sekilas terlihat sama, 2 keyword ini sangat berbeda. `Scanner` dengan kapital \"S\" merupakan objek, sedangkan `scanner` dengan \"s\" kecil merupakan identifier yang kita buat untuk menampung objek `Scanner`. Bisa dibilang `scanner` adalah variabel yang menampung `Scanner`.\n\n> Karena \\`scanner\\` pada contoh ini adalah identifier, seperti identifier pada umumnya, kalian bisa mengganti namanya sesuka hati. Yang perlu diperhatikan adalah ketika melakukan pemanggilan, identifier yang digunakan juga harus sama.\n\n## Method-method dalam Scanner\n\nPenggunaan method pada objek Scanner harus disesuaikan dengan tipe data inputan, sehingga ada banyak method yang disediakan, diantaranya yaitu:\n\n* `nextLine` — Mengambil inputan `string`\n* `nextInt` — Mengambil inputan `int` atau angka bulat\n* `nextFloat` — Mengambil inputan `float` atau angka desimal\n\nSelain itu juga ada method lainnya seperti `nextBoolean`, `nextDouble`, dan `nextLong`. Dari namanya sudah kelihatan ya fungsinya apa.\n\nPenggunaan method-method ini kurang lebih sama seperti sebelumnya. Kita harus membuat objek Scanner terlebih dahulu lalu memanggil method sesuai fungsinya. Contohnya seperti ini.\n\n```java\nimport java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    \n    System.out.print(\"Masukkan nama         : \");\n    String nama = scanner.nextLine();\n    System.out.print(\"Masukkan angka bulat  : \");\n    int bulat = scanner.nextInt();\n    System.out.print(\"Masukkan angka pecahan: \");\n    float pecahan = scanner.nextFloat();\n    float hasil = bulat + pecahan;\n    \n    System.out.println(\"Halo \" + nama);\n    System.out.printf(\"Hasil dari %d + %.2f adalah %.2f\", bulat, pecahan, hasil);\n  }\n}\n```\n\nPada program tersebut kita menginginkan user melakukan 3 inputan. Pertama adalah nama dengan tipe data `string`, selanjutnya ada angka bulat dengan tipe data `int`, dan terakhir adalah angka pecahan dengan tipe data `float`. Karena semua punya tipe data yang berbeda, method yang digunakan juga harus disesuaikan.\n\nSelanjutnya dilakukan penjumlahan antara angka bulat dan angka pecahan dan dimasukkan ke dalam variabel hasil. Variabel ini bertipe float karena kita memiliki variabel `pecahan` yang juga bertipe `float`.\n\nTerakhir, kita mengoutputkan nama dengan method `println`, serta angka bulat, pecahan, dan hasil dengan method `printf` seperti yang terlihat di atas. Kalau lupa apa maksud dari `printf` tersebut bisa lihat lagi di [sini](https:\u002F\u002Fwww.invasikode.com\u002Fsistem-output-pada-bahasa-java).\n\nJika kita coba jalankan dan memasukkan data dengan tipe data yang sesuai, maka kurang lebih akan keluar hasil sebagai berikut.\n\n```\nMasukkan nama         : Inva\nMasukkan angka bulat  : 23\nMasukkan angka pecahan: 3.1415\nHalo Inva\nHasil dari 23 + 3.14 adalah 26.14\n```\n\nBisa dilihat ya, hasilnya sudah sesuai dengan logika yang kita buat sebelumnya. Tetapi, jika kita coba memasukkan data yang tidak sesuai tipenya, program akan error seketika. Silahkan bisa dicoba sendiri.\n\n## Karakter Pemisah Input pada Java\n\nSebenarnya Java bukan membaca inputan berdasarkan hasil klik tombol, melainkan karakter yang dihasilkan oleh tombol tersebut yang sebenarnya digunakan. Bingung? jadi begini..\n\nKetika kita menggunakan method `nextLine`, objek scanner akan membaca seluruh baris inputan kita sampai menemukan karakter `\\n` atau yang disebut **escaped character newline**. Nah, untuk menginputkan karakter `\\n` ini kita bisa menggunakan tombol enter pada keyboard. \n\nLain cerita jika kita menggunakan method selain `nextLine`, seperti `nextInt` dan `nextFloat`. Method-method ini tidak hanya menggunakan karakter `\\n` sebagai tanda, melainkan juga karakter whitespace lain seperti **space** alias spasi.\n\nSupaya dapat gambaran, kita langsung saja coba dengan kode program.\n\n```java\nimport java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    System.out.print(\"Masukkan 2 angka dipisah dengan spasi: \");\n    int angka1 = scanner.nextInt();\n    int angka2 = scanner.nextInt();\n    int hasil = angka1 + angka2;\n    \n    System.out.printf(\"hasil dari %d + %d adalah %d\", angka1, angka2, hasil);\n  }\n}\n```\n\nPada kode tersebut kita bermaksud untuk menjumlahkan 2 angka yang berasal dari inputan pengguna. Kali ini kita coba memasukkan 2 angka yang dipisahkan dengan karakter spasi, semisal \\`23 7\\`. Maka hasilnya akan seperti ini.\n\n```\nMasukkan 2 angka dipisah dengan spasi: 23 7\nhasil dari 23 + 7 adalah 30\n```\n\nBisa dilihat ya, hasil yang keluar sesuai dengan inputan yang diberikan, yaitu 30 sebagai hasil penjumlahan dari 23 dan 7.\n\nJika kita coba menggunakan tombol enter hasilnya juga akan sama, kurang lebih seperti ini:\n\n```\nMasukkan 2 angka dipisah dengan spasi: 23\n7\nhasil dari 23 + 7 adalah 30\n```\n\nIngat ya, hal ini tidak berlaku untuk inputan dengan method `nextLine`. Ini karena `nextLine` hanya akan membaca inputan ketika sudah menemukan karakter `\\n` alias ketika kita menekan tombol enter.\n\n## Catatan: Hati-hati dengan Scanner\n\nSeperti yang disebutkan di atas, method **selain** `nextLine` akan diproses ketika sudah menemukan karakter whitespace. Hal ini ternyata menimbulkan sedikit masalah pada Java.\n\nMasalah yang muncul adalah ketika kita coba memanggil method `nextLine` setelah pemanggilan method lainnya seperti `nextInt` atau `nextFloat`. Contohnya seperti ini.\n\n```java\nimport java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    System.out.print(\"Masukkan angka : \");\n    int angka = scanner.nextInt();\n    System.out.print(\"Masukkan nama  : \");\n    String nama = scanner.nextLine();\n    \n    System.out.println(\"Isi variabel angka : \" + angka);\n    System.out.println(\"Isi variabel nama  : \" + nama);\n  }\n}\n```\n\nSekarang coba jalankan kode tersebut dan inputkan sesuai perintah yang diberikan.\n\nJika sudah, maka kurang lebih hasilnya akan seperti ini.\n\n```\nMasukkan angka : 24\nMasukkan nama  : Isi variabel angka : 24\nIsi variabel nama  :\n```\n\nNah loh, ketika kita menginputkan angka lalu menekan tombol enter, inputan kedua untuk meminta nama tidak dijalankan malah langsung keluar output seperti itu. Kira-kira kenapa?\n\nHal ini disebabkan karena method `nextInt` atau lainnya tidak menghilangkan karakter `\\n` alias newline. Jadi ketika kita menekan enter setelah memasukkan angka, karakter `\\n` sebenarnya masih tertinggal di sana.\n\nMasih ingat ya, kalau method `nextLine` membaca baris sampai ditemukan karakter `\\n`. Nah, karena setelah pemanggilan `nextInt` karakter tersebut masih tertinggal, maka method `nextLine` akan membaca baris kosong. Ini juga yang menyebabkan inputan nama tidak diminta oleh program.\n\n> Untuk tahu lebih lanjut mengenai hal ini bisa join baca di lapak [stackoverflow ini](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F13102045\u002Fscanner-is-skipping-nextline-after-using-next-or-nextfoo)\n\n**Lalu solusinya bagaimana?**\n\nSolusinya gampang, tinggal minta inputan lagi. Jadi kode yang sebelumnya bisa kita ubah menjadi seperti ini.\n\n```java\nimport java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    System.out.print(\"Masukkan angka : \");\n    int angka = scanner.nextInt();\n    System.out.print(\"Masukkan nama  : \");\n    scanner.nextLine(); \u002F\u002F tambahkan baris ini\n    String nama = scanner.nextLine();\n    \n    System.out.println(\"Isi variabel angka : \" + angka);\n    System.out.println(\"Isi variabel nama  : \" + nama);\n  }\n}\n```\n\nJika dijalankan maka luarannya pasti akan sesuai.\n\n```\nMasukkan angka : 24\nMasukkan nama  : Inva\nIsi variabel angka : 24\nIsi variabel nama  : Inva\n```\n\nSedikit penjelasan, pada kode tersebut kita memanggil method `nextLine` sebanyak 2 kali. Pemanggilan pertama bertujuan untuk membaca sekaligus menghilangkan karakter `\\n` sisa dari method `nextInt` sebelumnya. Sedangkan panggilan kedua berfungsi untuk mengambil inputan nama dari user.\n\nJadi jangan heran kalau pemanggilan `nextLine` pertama tidak melibatkan assignment variabel sama sekali.\n\n## Selanjutnya\n\nSetelah mengetahui tentang sistem input pada Java, pada kesempatan selanjutnya kita akan membahas lebih dalam tentang variabel dan tipe datanya.\n\nSelamat berkoding ria\n","\u003Cp>Sebelumnya kita telah membahas tentang \u003Ca href=\"https:\u002F\u002Fwww.invasikode.com\u002Fsistem-output-pada-bahasa-java\">sistem output\u003C\u002Fa>. Kita juga sudah membahas tentang \u003Ca href=\"https:\u002F\u002Fwww.invasikode.com\u002Fvariabel-dan-literal-pada-bahasa-java\">variabel dan literal\u003C\u002Fa>. Tetapi, sejauh ini program yang kita buat masih begitu-begitu saja. Satu arah, hanya menampilkan output tanpa ada sesuatu yang interaktif.\u003C\u002Fp>\n\u003Cp>Salah satu cara yang bisa dilakukan untuk membuat program kita lebih interaktif adalah dengan menggunakan sistem input.\u003C\u002Fp>\n\u003Cp>Bagaimana cara membuat sistem input pada Java, dan apa yang bisa kita lakukan dengan ini? mari kita bahas lebih lanjut.\u003C\u002Fp>\n\u003Ch2 id=\"sekilas-tentang-sistem-input-dan-scanner\">Sekilas tentang Sistem Input dan Scanner\u003C\u002Fh2>\n\u003Cp>Sistem input, adalah perintah yang kita gunakan untuk memerintahkan komputer mengambil masukan dari pengguna.\u003C\u002Fp>\n\u003Cp>Secara umum, masukan ini bisa berupa ketikan keyboard, klik mouse, sentuhan layar, dan lain sebagainya.\u003C\u002Fp>\n\u003Cp>Walaupun ada banyak cara melakukan input, fokus kita kali ini cukup inputan dari ketikan user saja. Jadi kita akan coba membaca ketikan user pada layar terminal dan memasukkannya pada sebuah variabel.\u003C\u002Fp>\n\u003Cp>Pada bahasa Java, sistem input dilayani oleh objek yang bernama \u003Ccode>Scanner\u003C\u002Fcode>. Objek ini sudah tersedia dan bisa kita gunakan dengan melakukan import library terlebih dahulu, yaitu \u003Ccode>java.util.*\u003C\u002Fcode> atau \u003Ccode>java.util.Scanner\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>Library\u003C\u002Fstrong> merupakan koleksi kode yang sudah sudah dituliskan, sehingga kita tidak perlu lagi menulis kode dari awal untuk melakukan hal-hal sepele seperti sistem input ini.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Dalam inisialisasinya, objek \u003Ccode>Scanner\u003C\u002Fcode> harus memiliki sumber input sebagai argumennya. Karena kali ini kita mengambil inputan dari terminal, maka argumen yang diberikan adalah \u003Ccode>System.in\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Untuk lebih jelasnya tentang \u003Ccode>Scanner\u003C\u002Fcode>, bisa kalian coba ketik dan jalankan kode berikut:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">JAVA\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"import%20java.util.Scanner%3B%20%20%2F%2F%20import%20Scanner%0A%0Apublic%20class%20SistemOutput%20%7B%0A%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20Scanner%20scanner%20%3D%20new%20Scanner(System.in)%3B%20%20%2F%2F%20inisialisasi%20objek%20scanner%0A%20%20%20%20System.out.print(%22Masukkan%20nama%3A%20%22)%3B%0A%20%20%20%20String%20nama%20%3D%20scanner.nextLine()%3B%20%20%20%20%20%20%20%20%20%20%2F%2F%20membaca%20inputan%20dari%20keyboard%0A%20%20%20%20System.out.println(%22Halo%20%22%20%2B%20nama)%3B%20%20%20%20%20%20%20%20%2F%2F%20output%20hasil%20inputan%0A%20%20%7D%0A%7D\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>import java.util.Scanner;  \u002F\u002F import Scanner\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);  \u002F\u002F inisialisasi objek scanner\n    System.out.print(\"Masukkan nama: \");\n    String nama = scanner.nextLine();          \u002F\u002F membaca inputan dari keyboard\n    System.out.println(\"Halo \" + nama);        \u002F\u002F output hasil inputan\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Ketika program dijalankan, maka program akan berhenti pada tulisan \u003Ccode>Masukkan nama:\u003C\u002Fcode>. Ini karena ketika kita panggil \u003Ccode>scanner.nextLine()\u003C\u002Fcode> program akan menunggu inputan dari user.\u003C\u002Fp>\n\u003Cp>Selanjutnya coba ketikkan sebuah nama, misal &quot;Inva&quot; lalu tekan tombol enter. Nantinya akan keluar outputan \u003Cstrong>&quot;Halo Inva&quot;\u003C\u002Fstrong>. Lengkapnya seperti ini:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Masukkan%20nama%3A%20Inva%0AHalo%20Inva\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Masukkan nama: Inva\nHalo Inva\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada contoh tersebut kita telah menggunakan method \u003Ccode>nextLine\u003C\u002Fcode>. Method ini berfungsi untuk mengambil inputan yang bertipe \u003Ccode>String\u003C\u002Fcode> alias huruf atau kumpulan huruf.\u003C\u002Fp>\n\u003Cp>Biasanya terjadi salah paham antara \u003Ccode>Scanner\u003C\u002Fcode> dan \u003Ccode>scanner\u003C\u002Fcode>. Walaupun sekilas terlihat sama, 2 keyword ini sangat berbeda. \u003Ccode>Scanner\u003C\u002Fcode> dengan kapital &quot;S&quot; merupakan objek, sedangkan \u003Ccode>scanner\u003C\u002Fcode> dengan &quot;s&quot; kecil merupakan identifier yang kita buat untuk menampung objek \u003Ccode>Scanner\u003C\u002Fcode>. Bisa dibilang \u003Ccode>scanner\u003C\u002Fcode> adalah variabel yang menampung \u003Ccode>Scanner\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Karena `scanner` pada contoh ini adalah identifier, seperti identifier pada umumnya, kalian bisa mengganti namanya sesuka hati. Yang perlu diperhatikan adalah ketika melakukan pemanggilan, identifier yang digunakan juga harus sama.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"method-method-dalam-scanner\">Method-method dalam Scanner\u003C\u002Fh2>\n\u003Cp>Penggunaan method pada objek Scanner harus disesuaikan dengan tipe data inputan, sehingga ada banyak method yang disediakan, diantaranya yaitu:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>nextLine\u003C\u002Fcode> — Mengambil inputan \u003Ccode>string\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>nextInt\u003C\u002Fcode> — Mengambil inputan \u003Ccode>int\u003C\u002Fcode> atau angka bulat\u003C\u002Fli>\n\u003Cli>\u003Ccode>nextFloat\u003C\u002Fcode> — Mengambil inputan \u003Ccode>float\u003C\u002Fcode> atau angka desimal\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Selain itu juga ada method lainnya seperti \u003Ccode>nextBoolean\u003C\u002Fcode>, \u003Ccode>nextDouble\u003C\u002Fcode>, dan \u003Ccode>nextLong\u003C\u002Fcode>. Dari namanya sudah kelihatan ya fungsinya apa.\u003C\u002Fp>\n\u003Cp>Penggunaan method-method ini kurang lebih sama seperti sebelumnya. Kita harus membuat objek Scanner terlebih dahulu lalu memanggil method sesuai fungsinya. Contohnya seperti ini.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">JAVA\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"import%20java.util.Scanner%3B%0A%0Apublic%20class%20SistemOutput%20%7B%0A%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20Scanner%20scanner%20%3D%20new%20Scanner(System.in)%3B%0A%20%20%20%20%0A%20%20%20%20System.out.print(%22Masukkan%20nama%20%20%20%20%20%20%20%20%20%3A%20%22)%3B%0A%20%20%20%20String%20nama%20%3D%20scanner.nextLine()%3B%0A%20%20%20%20System.out.print(%22Masukkan%20angka%20bulat%20%20%3A%20%22)%3B%0A%20%20%20%20int%20bulat%20%3D%20scanner.nextInt()%3B%0A%20%20%20%20System.out.print(%22Masukkan%20angka%20pecahan%3A%20%22)%3B%0A%20%20%20%20float%20pecahan%20%3D%20scanner.nextFloat()%3B%0A%20%20%20%20float%20hasil%20%3D%20bulat%20%2B%20pecahan%3B%0A%20%20%20%20%0A%20%20%20%20System.out.println(%22Halo%20%22%20%2B%20nama)%3B%0A%20%20%20%20System.out.printf(%22Hasil%20dari%20%25d%20%2B%20%25.2f%20adalah%20%25.2f%22%2C%20bulat%2C%20pecahan%2C%20hasil)%3B%0A%20%20%7D%0A%7D\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>import java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    \n    System.out.print(\"Masukkan nama         : \");\n    String nama = scanner.nextLine();\n    System.out.print(\"Masukkan angka bulat  : \");\n    int bulat = scanner.nextInt();\n    System.out.print(\"Masukkan angka pecahan: \");\n    float pecahan = scanner.nextFloat();\n    float hasil = bulat + pecahan;\n    \n    System.out.println(\"Halo \" + nama);\n    System.out.printf(\"Hasil dari %d + %.2f adalah %.2f\", bulat, pecahan, hasil);\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada program tersebut kita menginginkan user melakukan 3 inputan. Pertama adalah nama dengan tipe data \u003Ccode>string\u003C\u002Fcode>, selanjutnya ada angka bulat dengan tipe data \u003Ccode>int\u003C\u002Fcode>, dan terakhir adalah angka pecahan dengan tipe data \u003Ccode>float\u003C\u002Fcode>. Karena semua punya tipe data yang berbeda, method yang digunakan juga harus disesuaikan.\u003C\u002Fp>\n\u003Cp>Selanjutnya dilakukan penjumlahan antara angka bulat dan angka pecahan dan dimasukkan ke dalam variabel hasil. Variabel ini bertipe float karena kita memiliki variabel \u003Ccode>pecahan\u003C\u002Fcode> yang juga bertipe \u003Ccode>float\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Terakhir, kita mengoutputkan nama dengan method \u003Ccode>println\u003C\u002Fcode>, serta angka bulat, pecahan, dan hasil dengan method \u003Ccode>printf\u003C\u002Fcode> seperti yang terlihat di atas. Kalau lupa apa maksud dari \u003Ccode>printf\u003C\u002Fcode> tersebut bisa lihat lagi di \u003Ca href=\"https:\u002F\u002Fwww.invasikode.com\u002Fsistem-output-pada-bahasa-java\">sini\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Jika kita coba jalankan dan memasukkan data dengan tipe data yang sesuai, maka kurang lebih akan keluar hasil sebagai berikut.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Masukkan%20nama%20%20%20%20%20%20%20%20%20%3A%20Inva%0AMasukkan%20angka%20bulat%20%20%3A%2023%0AMasukkan%20angka%20pecahan%3A%203.1415%0AHalo%20Inva%0AHasil%20dari%2023%20%2B%203.14%20adalah%2026.14\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Masukkan nama         : Inva\nMasukkan angka bulat  : 23\nMasukkan angka pecahan: 3.1415\nHalo Inva\nHasil dari 23 + 3.14 adalah 26.14\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Bisa dilihat ya, hasilnya sudah sesuai dengan logika yang kita buat sebelumnya. Tetapi, jika kita coba memasukkan data yang tidak sesuai tipenya, program akan error seketika. Silahkan bisa dicoba sendiri.\u003C\u002Fp>\n\u003Ch2 id=\"karakter-pemisah-input-pada-java\">Karakter Pemisah Input pada Java\u003C\u002Fh2>\n\u003Cp>Sebenarnya Java bukan membaca inputan berdasarkan hasil klik tombol, melainkan karakter yang dihasilkan oleh tombol tersebut yang sebenarnya digunakan. Bingung? jadi begini..\u003C\u002Fp>\n\u003Cp>Ketika kita menggunakan method \u003Ccode>nextLine\u003C\u002Fcode>, objek scanner akan membaca seluruh baris inputan kita sampai menemukan karakter \u003Ccode>\\n\u003C\u002Fcode> atau yang disebut \u003Cstrong>escaped character newline\u003C\u002Fstrong>. Nah, untuk menginputkan karakter \u003Ccode>\\n\u003C\u002Fcode> ini kita bisa menggunakan tombol enter pada keyboard. \u003C\u002Fp>\n\u003Cp>Lain cerita jika kita menggunakan method selain \u003Ccode>nextLine\u003C\u002Fcode>, seperti \u003Ccode>nextInt\u003C\u002Fcode> dan \u003Ccode>nextFloat\u003C\u002Fcode>. Method-method ini tidak hanya menggunakan karakter \u003Ccode>\\n\u003C\u002Fcode> sebagai tanda, melainkan juga karakter whitespace lain seperti \u003Cstrong>space\u003C\u002Fstrong> alias spasi.\u003C\u002Fp>\n\u003Cp>Supaya dapat gambaran, kita langsung saja coba dengan kode program.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">JAVA\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"import%20java.util.Scanner%3B%0A%0Apublic%20class%20SistemOutput%20%7B%0A%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20Scanner%20scanner%20%3D%20new%20Scanner(System.in)%3B%0A%20%20%20%20System.out.print(%22Masukkan%202%20angka%20dipisah%20dengan%20spasi%3A%20%22)%3B%0A%20%20%20%20int%20angka1%20%3D%20scanner.nextInt()%3B%0A%20%20%20%20int%20angka2%20%3D%20scanner.nextInt()%3B%0A%20%20%20%20int%20hasil%20%3D%20angka1%20%2B%20angka2%3B%0A%20%20%20%20%0A%20%20%20%20System.out.printf(%22hasil%20dari%20%25d%20%2B%20%25d%20adalah%20%25d%22%2C%20angka1%2C%20angka2%2C%20hasil)%3B%0A%20%20%7D%0A%7D\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>import java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    System.out.print(\"Masukkan 2 angka dipisah dengan spasi: \");\n    int angka1 = scanner.nextInt();\n    int angka2 = scanner.nextInt();\n    int hasil = angka1 + angka2;\n    \n    System.out.printf(\"hasil dari %d + %d adalah %d\", angka1, angka2, hasil);\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada kode tersebut kita bermaksud untuk menjumlahkan 2 angka yang berasal dari inputan pengguna. Kali ini kita coba memasukkan 2 angka yang dipisahkan dengan karakter spasi, semisal `23 7`. Maka hasilnya akan seperti ini.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Masukkan%202%20angka%20dipisah%20dengan%20spasi%3A%2023%207%0Ahasil%20dari%2023%20%2B%207%20adalah%2030\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Masukkan 2 angka dipisah dengan spasi: 23 7\nhasil dari 23 + 7 adalah 30\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Bisa dilihat ya, hasil yang keluar sesuai dengan inputan yang diberikan, yaitu 30 sebagai hasil penjumlahan dari 23 dan 7.\u003C\u002Fp>\n\u003Cp>Jika kita coba menggunakan tombol enter hasilnya juga akan sama, kurang lebih seperti ini:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Masukkan%202%20angka%20dipisah%20dengan%20spasi%3A%2023%0A7%0Ahasil%20dari%2023%20%2B%207%20adalah%2030\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Masukkan 2 angka dipisah dengan spasi: 23\n7\nhasil dari 23 + 7 adalah 30\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Ingat ya, hal ini tidak berlaku untuk inputan dengan method \u003Ccode>nextLine\u003C\u002Fcode>. Ini karena \u003Ccode>nextLine\u003C\u002Fcode> hanya akan membaca inputan ketika sudah menemukan karakter \u003Ccode>\\n\u003C\u002Fcode> alias ketika kita menekan tombol enter.\u003C\u002Fp>\n\u003Ch2 id=\"catatan-hati-hati-dengan-scanner\">Catatan: Hati-hati dengan Scanner\u003C\u002Fh2>\n\u003Cp>Seperti yang disebutkan di atas, method \u003Cstrong>selain\u003C\u002Fstrong> \u003Ccode>nextLine\u003C\u002Fcode> akan diproses ketika sudah menemukan karakter whitespace. Hal ini ternyata menimbulkan sedikit masalah pada Java.\u003C\u002Fp>\n\u003Cp>Masalah yang muncul adalah ketika kita coba memanggil method \u003Ccode>nextLine\u003C\u002Fcode> setelah pemanggilan method lainnya seperti \u003Ccode>nextInt\u003C\u002Fcode> atau \u003Ccode>nextFloat\u003C\u002Fcode>. Contohnya seperti ini.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">JAVA\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"import%20java.util.Scanner%3B%0A%0Apublic%20class%20SistemOutput%20%7B%0A%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20Scanner%20scanner%20%3D%20new%20Scanner(System.in)%3B%0A%20%20%20%20System.out.print(%22Masukkan%20angka%20%3A%20%22)%3B%0A%20%20%20%20int%20angka%20%3D%20scanner.nextInt()%3B%0A%20%20%20%20System.out.print(%22Masukkan%20nama%20%20%3A%20%22)%3B%0A%20%20%20%20String%20nama%20%3D%20scanner.nextLine()%3B%0A%20%20%20%20%0A%20%20%20%20System.out.println(%22Isi%20variabel%20angka%20%3A%20%22%20%2B%20angka)%3B%0A%20%20%20%20System.out.println(%22Isi%20variabel%20nama%20%20%3A%20%22%20%2B%20nama)%3B%0A%20%20%7D%0A%7D\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>import java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    System.out.print(\"Masukkan angka : \");\n    int angka = scanner.nextInt();\n    System.out.print(\"Masukkan nama  : \");\n    String nama = scanner.nextLine();\n    \n    System.out.println(\"Isi variabel angka : \" + angka);\n    System.out.println(\"Isi variabel nama  : \" + nama);\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Sekarang coba jalankan kode tersebut dan inputkan sesuai perintah yang diberikan.\u003C\u002Fp>\n\u003Cp>Jika sudah, maka kurang lebih hasilnya akan seperti ini.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Masukkan%20angka%20%3A%2024%0AMasukkan%20nama%20%20%3A%20Isi%20variabel%20angka%20%3A%2024%0AIsi%20variabel%20nama%20%20%3A\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Masukkan angka : 24\nMasukkan nama  : Isi variabel angka : 24\nIsi variabel nama  :\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Nah loh, ketika kita menginputkan angka lalu menekan tombol enter, inputan kedua untuk meminta nama tidak dijalankan malah langsung keluar output seperti itu. Kira-kira kenapa?\u003C\u002Fp>\n\u003Cp>Hal ini disebabkan karena method \u003Ccode>nextInt\u003C\u002Fcode> atau lainnya tidak menghilangkan karakter \u003Ccode>\\n\u003C\u002Fcode> alias newline. Jadi ketika kita menekan enter setelah memasukkan angka, karakter \u003Ccode>\\n\u003C\u002Fcode> sebenarnya masih tertinggal di sana.\u003C\u002Fp>\n\u003Cp>Masih ingat ya, kalau method \u003Ccode>nextLine\u003C\u002Fcode> membaca baris sampai ditemukan karakter \u003Ccode>\\n\u003C\u002Fcode>. Nah, karena setelah pemanggilan \u003Ccode>nextInt\u003C\u002Fcode> karakter tersebut masih tertinggal, maka method \u003Ccode>nextLine\u003C\u002Fcode> akan membaca baris kosong. Ini juga yang menyebabkan inputan nama tidak diminta oleh program.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Untuk tahu lebih lanjut mengenai hal ini bisa join baca di lapak \u003Ca href=\"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F13102045\u002Fscanner-is-skipping-nextline-after-using-next-or-nextfoo\">stackoverflow ini\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>Lalu solusinya bagaimana?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Solusinya gampang, tinggal minta inputan lagi. Jadi kode yang sebelumnya bisa kita ubah menjadi seperti ini.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">JAVA\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"import%20java.util.Scanner%3B%0A%0Apublic%20class%20SistemOutput%20%7B%0A%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20Scanner%20scanner%20%3D%20new%20Scanner(System.in)%3B%0A%20%20%20%20System.out.print(%22Masukkan%20angka%20%3A%20%22)%3B%0A%20%20%20%20int%20angka%20%3D%20scanner.nextInt()%3B%0A%20%20%20%20System.out.print(%22Masukkan%20nama%20%20%3A%20%22)%3B%0A%20%20%20%20scanner.nextLine()%3B%20%2F%2F%20tambahkan%20baris%20ini%0A%20%20%20%20String%20nama%20%3D%20scanner.nextLine()%3B%0A%20%20%20%20%0A%20%20%20%20System.out.println(%22Isi%20variabel%20angka%20%3A%20%22%20%2B%20angka)%3B%0A%20%20%20%20System.out.println(%22Isi%20variabel%20nama%20%20%3A%20%22%20%2B%20nama)%3B%0A%20%20%7D%0A%7D\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>import java.util.Scanner;\n\npublic class SistemOutput {\n  public static void main(String[] args) {\n    Scanner scanner = new Scanner(System.in);\n    System.out.print(\"Masukkan angka : \");\n    int angka = scanner.nextInt();\n    System.out.print(\"Masukkan nama  : \");\n    scanner.nextLine(); \u002F\u002F tambahkan baris ini\n    String nama = scanner.nextLine();\n    \n    System.out.println(\"Isi variabel angka : \" + angka);\n    System.out.println(\"Isi variabel nama  : \" + nama);\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Jika dijalankan maka luarannya pasti akan sesuai.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Masukkan%20angka%20%3A%2024%0AMasukkan%20nama%20%20%3A%20Inva%0AIsi%20variabel%20angka%20%3A%2024%0AIsi%20variabel%20nama%20%20%3A%20Inva\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Masukkan angka : 24\nMasukkan nama  : Inva\nIsi variabel angka : 24\nIsi variabel nama  : Inva\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Sedikit penjelasan, pada kode tersebut kita memanggil method \u003Ccode>nextLine\u003C\u002Fcode> sebanyak 2 kali. Pemanggilan pertama bertujuan untuk membaca sekaligus menghilangkan karakter \u003Ccode>\\n\u003C\u002Fcode> sisa dari method \u003Ccode>nextInt\u003C\u002Fcode> sebelumnya. Sedangkan panggilan kedua berfungsi untuk mengambil inputan nama dari user.\u003C\u002Fp>\n\u003Cp>Jadi jangan heran kalau pemanggilan \u003Ccode>nextLine\u003C\u002Fcode> pertama tidak melibatkan assignment variabel sama sekali.\u003C\u002Fp>\n\u003Ch2 id=\"selanjutnya\">Selanjutnya\u003C\u002Fh2>\n\u003Cp>Setelah mengetahui tentang sistem input pada Java, pada kesempatan selanjutnya kita akan membahas lebih dalam tentang variabel dan tipe datanya.\u003C\u002Fp>\n\u003Cp>Selamat berkoding ria\u003C\u002Fp>\n","",[231,250,263,276,289,310],{"id":232,"title":233,"title_en":21,"slug":234,"excerpt":235,"excerpt_en":21,"has_translation":15,"published_at":236,"reading_time":237,"hidden_from_listing":15,"tags":238,"thumbnail_image":21,"og_image":241,"series":242,"authors":247},133,"Python Strings: the Badge That Only Worked for One Name","python-strings","The badge script printed the right name for the person who wrote it and the wrong name for everybody else. Slicing counts characters, and a name is words.","2026-10-28T13:00:00.000Z",6,[239,240],"python","string","\u002Fog\u002Fpython-strings.png",{"id":243,"title":244,"title_en":245,"slug":246},30,"Koleksi dan String","Collections and Strings","python-collections",[248],{"authors_id":249},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":251,"title":252,"title_en":21,"slug":253,"excerpt":254,"excerpt_en":21,"has_translation":15,"published_at":255,"reading_time":237,"hidden_from_listing":15,"tags":256,"thumbnail_image":21,"og_image":258,"series":259,"authors":260},132,"Python Tuples: Why All Three Points Are the Same Point","python-tuples","Three points walk into a loop and come out identical. The list was never copied three times; the name was. A tuple makes that bug impossible.","2026-10-28T12:00:00.000Z",[239,257],"tuple","\u002Fog\u002Fpython-tuples.png",{"id":243,"title":244,"title_en":245,"slug":246},[261],{"authors_id":262},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":264,"title":265,"title_en":21,"slug":266,"excerpt":267,"excerpt_en":21,"has_translation":15,"published_at":268,"reading_time":237,"hidden_from_listing":15,"tags":269,"thumbnail_image":21,"og_image":271,"series":272,"authors":273},131,"Python Sets: the Duplicate That Keeps Coming Back","python-sets","A de-duplication loop that works on clean data leaves four tags where there should be two. The bug is case, and the fix is a `set`.","2026-10-28T11:00:00.000Z",[239,270],"set","\u002Fog\u002Fpython-sets.png",{"id":243,"title":244,"title_en":245,"slug":246},[274],{"authors_id":275},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":277,"title":278,"title_en":21,"slug":279,"excerpt":280,"excerpt_en":21,"has_translation":15,"published_at":281,"reading_time":237,"hidden_from_listing":15,"tags":282,"thumbnail_image":21,"og_image":284,"series":285,"authors":286},130,"Python Dictionaries: the Key That Isn't There","python-dictionary","A word counter dies the first time it meets a word twice. The fix is one line; what takes longer is knowing which of a dict's three lookups to reach for.","2026-10-28T10:00:00.000Z",[239,283],"dictionary","\u002Fog\u002Fpython-dictionary.png",{"id":243,"title":244,"title_en":245,"slug":246},[287],{"authors_id":288},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":290,"title":291,"title_en":292,"slug":293,"excerpt":294,"excerpt_en":295,"has_translation":12,"published_at":296,"reading_time":14,"hidden_from_listing":15,"tags":297,"thumbnail_image":21,"og_image":304,"series":305,"authors":307},129,"Biar RAG nggak kena 504: pisahin jalur query dan ingestion","So Your RAG Stops Hitting 504: Split the Query Path From Ingestion","rag-pisah-jalur-query-dan-ingestion","Satu service RAG yang merangkap parsing dan menjawab kueri bakal tumbang pas ada yang upload PDF 200 halaman. Obatnya dua jalur dan satu queue.","One RAG service that both parses uploads and answers queries will fall over the moment someone uploads a 200-page PDF. The cure is two paths and one queue.","2026-10-22T01:30:00.000Z",[298,299,300,301,302,303],"rag","cloud-run","cloud-tasks","gcp","serverless","arsitektur","\u002Fog\u002Frag-pisah-jalur-query-dan-ingestion.png",{"id":306,"title":35,"title_en":36,"slug":37},8,[308],{"authors_id":309},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},{"id":311,"title":312,"title_en":313,"slug":314,"excerpt":315,"excerpt_en":316,"has_translation":12,"published_at":317,"reading_time":237,"hidden_from_listing":15,"tags":318,"thumbnail_image":21,"og_image":325,"series":326,"authors":327},128,"Linear atau graf: cara mengatur banyak agent tanpa loop abadi","Linear or Graph: How to Run Many Agents Without an Eternal Loop","multi-agen-linear-atau-grafik","Satu agent dengan dua puluh tool gampang kacau. Begitu beberapa agent saling revisi, kamu butuh graf yang mendukung cycle dan angka yang membuatnya berhenti.","One agent with twenty tools gets messy fast. Once several agents revise each other, you need a graph that allows cycles and a number that makes it stop.","2026-10-21T16:05:00.000Z",[319,320,321,322,323,324],"multi-agent","langgraph","autogen","orkestrasi","checkpoint","llm","\u002Fog\u002Fmulti-agen-linear-atau-grafik.png",{"id":306,"title":35,"title_en":36,"slug":37},[328],{"authors_id":329},{"id":126,"name":127,"slug":128,"role":129,"profile_picture":21},[331,335,338,341,344],{"text":332,"depth":333,"id":334},"Sekilas tentang Sistem Input dan Scanner",2,"sekilas-tentang-sistem-input-dan-scanner",{"text":336,"depth":333,"id":337},"Method-method dalam Scanner","method-method-dalam-scanner",{"text":339,"depth":333,"id":340},"Karakter Pemisah Input pada Java","karakter-pemisah-input-pada-java",{"text":342,"depth":333,"id":343},"Catatan: Hati-hati dengan Scanner","catatan-hati-hati-dengan-scanner",{"text":345,"depth":333,"id":346},"Selanjutnya","selanjutnya",1793295835244]