CodeGym /Java Blog /Acak /Tugas Java dengan twist: halo, wawancara!
John Squirrels
Level 41
San Francisco

Tugas Java dengan twist: halo, wawancara!

Dipublikasikan di grup Acak
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.
Tugas Java dengan twist: halo, wawancara!  - 1
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

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_VALUEadalah nilai maksimum yang intdapat disimpan di Java. Jika Anda mencapai Integer.MAX_VALUEdan 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 intnilai maksimum ke startvariabel. 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 \u000dsebagai 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-elsewith a forloop untuk memecah beberapa loop menggunakan if-else. Ini akan membantu menghindari pembuatan sejumlah besar flag dan memeriksanya dalam if-elsepernyataan untuk menentukan apakah akan melanjutkan atau keluar dari loop dalam.

Tugas 4: Temukan satu duplikat dalam array bilangan bulat

Anda diberi array bilangan bulat (atau ArrayList, jika Anda mau) yang berisi setiap Integerdari 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 atau ArrayList. 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);
    }
}

Kesimpulan

Ada banyak jenis tugas Java praktis, dan Anda tidak tahu teka-teki seperti apa yang akan diminta pewawancara untuk Anda pecahkan. Namun, setiap pemberi kerja yang bijaksana memahami bahwa kemampuan Anda untuk menyelesaikan tugas praktis yang sebenarnya , seperti yang akan Anda temui di tempat kerja, jauh lebih penting daripada kemampuan Anda untuk menyelesaikan pertanyaan jebakan. Jadi lakukan ini sebanyak mungkin. Itu sebabnya kami membuat CodeGym. Bahan dari geeksforgeeks digunakan untuk membuat artikel ini.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION