Teman terbaik siswa CodeGym adalah tugas pemrograman, Java, dan validator tugas. Tetap saja, ada saatnya setiap pengembang padawan harus mulai keluar jalur, membuat proyek mininya sendiri, dan mempersiapkan diri untuk wawancara. Orang akan berpikir bahwa wawancara akan memiliki tugas Java praktis yang sama persis dengan yang ditemukan dalam kursus ini. Dan begitulah dalam banyak kasus, tetapi beberapa perusahaan suka mengajukan pertanyaan jebakan atau sesuatu yang tidak biasa. Untuk menghindari bingung selama wawancara yang menegangkan, ada baiknya mencoba menyelesaikan tugas Java yang serupa sendiri di rumah.
Pada artikel ini, kita akan membahas 5 tugas rumit tersebut. Kami menyarankan Anda terlebih dahulu membaca ketentuan dan mencoba menyelesaikannya sendiri. Dan satu hal lagi: jangan lupa mengerjakan tugas Java di kursus ini setiap hari!

- Tugas 1: Buat loop tak terbatas dari awal
- Tugas 2: Membuat komentar yang dapat dieksekusi
- Tugas 3: Buat loop bernama
- Tugas 4: Temukan satu duplikat dalam array bilangan bulat
- Tugas 5: Temukan duplikat non-unik dalam larik bilangan bulat
Tugas 1: Buat loop tak terbatas dari awal
Sebuah blok kode telah disediakan. Tambahkan ke dalamnya untuk membuat loop tidak terbatas.
class ToInfinity {
public static void main(String[] args) {
// Insert code here
for (int i = start; i <= start + 1; i++) {
/* This should be an infinite loop, but don't change anything here */
}
}
}
" Itu tidak sulit, " katamu. Anda kemungkinan besar menemukan diri Anda dalam skenario ini berulang kali: saat menyelesaikan tugas Java, Anda membuat loop tak terbatas dan harus memikirkan cara menghilangkannya. Nah, ini sebaliknya. Inilah bagian yang sulit: Anda tidak dapat mengubah loop itu sendiri atau kondisi keluarnya. Hanya ada dua iterasi. Tapi, mereka cukup untuk membuat loop tak terbatas. Sepertinya itu hanya akan dieksekusi untuk dua iterasi, tetapi Anda dapat membuatnya tak terbatas menggunakan luapan. Apakah Anda sudah menebak bagaimana caranya?
Larutan
Karena luapan,Integer.MAX_VALUE
adalah nilai maksimum yang int
dapat disimpan di Java. Jika Anda mencapai Integer.MAX_VALUE
dan menaikkan nilai ini, Anda memutar kembali ke Integer.MIN_VALUE
, atau lebih tepatnya, ke nilai serendah mungkin Integer
. Jadi, untuk menyelesaikan tugas Java ini, kita hanya perlu menetapkan 1 kurang dari int
nilai maksimum ke start
variabel. Kode Java untuk tugas ini:
class ToInfinity {
public static void main(String[] args) {
int start = Integer.MAX_VALUE - 1;
for (int i = start; i <= start + 1; i++) {
// Infinite loop
System.out.println(i); // Be sure we are in an infinite loop
}
}
}
Apa yang terjadi? Kita mulai dengan start=2147483645 (Integer.MAX_VALUE-1). Pada iterasi berikutnya, nilainya menjadi 2147483645, lalu 2147483646, lalu -2147483648, -2147483647... dan seterusnya.
Tugas 2: Membuat komentar yang dapat dieksekusi
Nah, ini dia! Dari pelajaran pertama, kami telah mendengar bahwa komentar tidak dieksekusi. Itu sebabnya mereka disebut komentar. Menurut kami solusi untuk tugas ini tidak selalu jelas bagi pemrogram Java, bahkan pemrogram berpengalaman sekalipun. Namun, ada satu cara rumit (tapi "legal") untuk membuat JVM menjalankan komentar. Dapatkah Anda merasakan ke mana tujuan kita? Mencoba menebak!Larutan
Kode Java untuk tugas ini:
public class ExecutableComment {
public static void main(String[] args) {
// The comment below will be executed!
// \u000d System.out.println("executable comment");
}
}
Jika kita memasukkan kode Java ini ke dalam IDE, inilah yang akan kita dapatkan:
executable comment
Ini karena kompiler Java menginterpretasikan karakter Unicode \u000d
sebagai baris baru, dan membaca kode kita seperti ini: Kode Java untuk tugas ini, seperti yang diinterpretasikan oleh kompiler:
public class ExecutableComment {
public static void main(String[] args) {
// The comment below will be executed!
// \u000d
System.out.println("comment executed");
}
}
Tugas 3: Buat loop bernama
Berikut anggota lain dari seri yang berjudul "Masalah Pemrograman Java Praktis untuk Sapi Bulat". Dalam arti bahwa tidak jelas mengapa hal ini diperlukan: loop tidak mungkin tersinggung oleh fakta bahwa itu belum diberi nama. Bagaimanapun, ini penting karena alasan lain: bahasa memungkinkan Anda memberi nama loop.Larutan
Catatan: "nama" ini dikenal oleh sebagian orang sebagai "label", dan tidak disarankan untuk digunakan dalam praktik. Kode Java untuk mendemonstrasikan loop bernama
public class NamedLoop {
public static void main(String[] args) {
loop1:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 3)
break loop1;
System.out.println("i = " + i + " j = " + j);
}
}
}
}
Inilah yang akan ditampilkan jika Anda menjalankan program:
i = 0 j = 0
i = 0 j = 1
i = 0 j = 2
i = 0 j = 3
i = 0 j = 4
i = 1 j = 0
i = 1 j = 1
i = 1 j = 2
i = 1 j = 3
i = 1 j = 4
i = 2 j = 0
i = 2 j = 1
i = 2 j = 2
i = 2 j = 3
i = 2 j = 4
Anda juga dapat menggunakan kata kunci continue untuk kembali ke awal loop bernama. Dan jika perlu, Anda dapat menggunakan break
(atau continue
) di nested if-else
with a for
loop untuk memecah beberapa loop menggunakan if-else
. Ini akan membantu menghindari pembuatan sejumlah besar flag dan memeriksanya dalam if-else
pernyataan untuk menentukan apakah akan melanjutkan atau keluar dari loop dalam.
Tugas 4: Temukan satu duplikat dalam array bilangan bulat
Anda diberi array bilangan bulat (atauArrayList
, jika Anda mau) yang berisi setiap Integer
dari 1 hingga 100. Array tersebut memiliki satu, dan hanya satu, elemen duplikat. Bagaimana Anda menemukannya? Lebih umum bagi seorang programmer Java untuk mendapatkan jenis tugas ini daripada tiga tugas sebelumnya. Karena ini tentang logika daripada pengetahuan Anda tentang seluk-beluk bahasa yang jarang digunakan. Dorongan tak terkendali pertama Anda untuk menggunakan kekerasan akan berlalu lebih cepat ketika otak Anda bekerja atau Anda menyadari "Saya seorang programmer. Saya pintar." Satu-satunya masalah adalah selama wawancara, ketika Anda sedang stres, ini mungkin tidak terjadi. Jadi pikirkan sekarang sebelum Anda melihat solusinya!
Berikut algoritmanya
Hitung jumlah semua angka dari 1 sampai 100. Kami rasa Anda tahu cara melakukannya (misalnya, menggunakan metode Gauss yang terkenal). Sekarang hitung jumlah elemen dalam array atauArrayList
. Dan... kurangi jumlah pertama dari yang kedua. Bingo! Angka yang dihasilkan adalah nilai elemen duplikat. Kode Java untuk tugas ini menggunakan file ArrayList
.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class FindDuplicate {
private static void findDuplicate(List<Integer> elements) {
int distinctSum = elements.stream().distinct().mapToInt(e -> e).sum();
// Find the sum of all list elements
int totalSum = elements.stream().mapToInt(e -> e).sum();
System.out.println("The repeated element is: " + (totalSum - distinctSum));
}
public static void main(String[] args) {
// Create a list of sequential elements in the interval [1..101).
List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
// Add the value 23 at index 53
elements.set(53, 23);
findDuplicate(elements);
}
}
Solusi lain
import java.util.List;
import java.util.ArrayList;
public class Duplicate {
public int findDuplicateNumber(List<Integer> numbers) {
int highestNumber = numbers.size() - 1;
int total = getSum(numbers);
int duplicate = total - (highestNumber * (highestNumber + 1) / 2);
return duplicate;
}
public int getSum(List<Integer> numbers) {
int sum = 0;
for (int num : numbers) {
sum = sum + num;
}
return sum;
}
public static void main(String a[]) {
List <Integer> numbers = new ArrayList <Integer>();
for (int i = 1; i < 100; i++) {
numbers.add(i);
}
// Add a duplicate to the list
numbers.add(25);
Duplicate dn = new Duplicate();
System.out.println("The repeated element is: " + dn.findDuplicateNumber(numbers));
}
}
Tugas 5: Temukan duplikat non-unik dalam larik bilangan bulat
Jika tugas sebelumnya terlalu mudah bagi Anda, coba lakukan yang ini: Anda diberi daftar bilangan bulat dari 1 sampai 100. Ada duplikat di dalamnya (lebih dari satu). Bagaimana Anda menemukan elemen yang muncul lebih dari satu kali (menemukan elemen dan menunjukkan berapa kali elemen tersebut muncul)?Larutan
Di sini solusi logisnya adalah menggunakan sesuatu seperti HashMap, karena ia menyimpan data dalam pasangan nilai kunci. Kode untuk tugas ini di Jawa:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class SomeDuplicates {
private static void findDuplicates(List<Integer> elements) {
HashMap <Integer, Integer> duplicates = new HashMap <>();
// Use the following rule to populate the Map duplicates:
// the key is the element value, and the value is the number of times it occurs
elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
// Remove any elements that don't occur more than once from the Map duplicates
// and store the result as a list (to make it easy to work with in the next step)
List <Map.Entry <Integer, Integer> >
result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
// Write the results for all elements to the result list
result.forEach(e -> System.out.println(String.format("Element %d occurs %d times", e.getKey(), e.getValue())));
}
public static void main(String[] args) {
List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
elements.set(97, 23);
elements.set(27, 51);
elements.set(99, 23);
findDuplicates(elements);
}
}
GO TO FULL VERSION