JavaRush /Блоги Java /Random-TG /Мушкилоти Java бо ҳилла: Салом, мусоҳибаҳо!

Мушкилоти Java бо ҳилла: Салом, мусоҳибаҳо!

Дар гурӯҳ нашр шудааст
Барои донишҷӯёни JavaRush , мушкилоти барномасозӣ, Java ва валидатор дӯстони беҳтарин мебошанд. Бо вуҷуди ин, барои ҳар як таҳиякунанда Падаван вақт меояд, ки вай бояд баъзан аз роҳи латукӯб берун равад, барои худ лоиҳаҳои хурд таҳия кунад ва ба мусоҳибаҳо омода шавад. Дар мусоҳиба, чунин ба назар мерасад, ки шумо бояд маҳз ҳамон мушкилоти амалии Java, ки дар курс аст, дучор шавед. Дар аксари ҳолатҳо ин дуруст аст, аммо баъзе ширкатҳо мехоҳанд саволҳои ҳилла ё чизи ғайриоддӣ пурсанд. Барои он ки ҳангоми мусоҳибаи стресс ошуфта нашавед, муфид аст, ки ин гуна мушкилоти Java-ро худатон дар хона ҳал кунед.
Мушкилоти Java бо ҳилла: Салом, мусоҳибаҳо!  - 1
Дар ин мақола мо ним даҳҳо ин вазифаҳои душворро дида мебароем. Мо тавсия медиҳем, ки шумо аввал шартро хонед ва кӯшиш кунед, ки онро худатон ҳал кунед. Ва як чизи дигар: фаромӯш накунед, ки ҳар рӯз мушкилоти Java-ро аз курс ҳал кунед!

Масъалаи Java - 1: Эҷоди як ҳалқаи беохир аз сифр

Як блоки code дода шудааст. Онро ба итмом расонед, то ҳалқа беохир гардад.
class ToInfinity {
    public static void main(String[] args) {

//впишите code сюда

        for (int i = start; i <= start + 1; i++) {
             /* тут должен быть бесконечный цикл, менять ничего нельзя*/
        }
    }
}
"Ҳеҷ чизи мураккаб нест" мегӯед. Эҳтимол, шумо на як бор ба ин вазъият дучор шудаед: ҳангоми ҳалли масъалаҳои Java, шумо як ҳалқаи беохир эҷод кардаед ва дар бораи чӣ гуна аз он халос шудан фикр мекардед. Ин роҳи дигар аст. Маслиҳат дар он аст, ки худи давра ва шартҳои баромадан аз он тағир дода намешавад. Танҳо ду такрор вуҷуд дорад. Бо вуҷуди ин, онҳо барои эҷоди як ҳалқаи беохир кофӣ ҳастанд. Чунин ба назар мерасад, ки он бояд танҳо барои ду такрор кор кунад, аммо онро бо истифода аз overflow беохир кардан мумкин аст. Оё шумо аллакай фаҳмидед, ки чӣ тавр?

Ҳалли

Аз сабаби зиёд шудани. Integer.MAX_VALUEарзиши ҳадди аксарест, ки intдар Java нигоҳ дошта мешавад. Агар шумо ба ин қиммат расед ва афзоиш диҳед, шумо ба , яъне ба ҳадди ақали қимат Integer.MAX_VALUEмеафтед . Ҳамин тариқ, барои ҳалли ин масъалаи Java, мо танҳо бояд ба тағирёбанда арзиш таъин кунем, ки аз арзиши максималии навъи додаҳо 1 камтар аст . Рамзи вазифа дар Java:Integer.MIN_VALUEIntegerstartint
class ToInfinity {
    public static void main(String[] args) {
        int start = Integer.MAX_VALUE - 1;
        for (int i = start; i <= start + 1; i++) {
            //бесконечный цикл
            System.out.println(i); //убеждаемся в бесконечности цикла
        }
    }
}
Чи мешавад? Мо бо start=2147483645 (Integer.MAX_VALUE-1) оғоз мекунем, дар такрори навбатӣ қимат ба 2147483645, баъд 2147483646, баъд -2147483648, -2147483647... ва ғайра мешавад.

Вазифаи Java-2. Эҷоди шарҳе, ки иҷро мешавад

Хуб, мо дар ин ҷоем! Аз лекцияхои аввал шунидем, ки эродхо ичро намешаванд. Барои ҳамин онҳо шарҳҳо мебошанд. Мо фикр мекунем, ки роҳи ҳалли ин мушкилот барои як барномасози Java, ҳатто барои як ботаҷриба на ҳамеша равшан аст. Аммо, як роҳи душвори маҷбур кардани мошини Java вуҷуд дорад, ки шарҳро барои иҷро "қонунӣ" иҷро кунад. Оё шумо ҳис мекунед, ки шамол аз куҷо мевазад? Кӯшиш кунед, ки тахмин кунед!

Ҳалли

Рамз барои ҳалли мушкилот дар Java:
public class ExecutableComment {
    public static void main(String[] args) {
        // комментарий ниже будет выполнен!
        // \u000d System.out.println("выполняемый комментарий");
    }
}
Агар мо рамзи ин вазифаро дар Java дар IDE ворид кунем, он чизест, ки мо мегирем:
выполняемый комментарий
Сабаб дар он аст, ки компилятори Java аломати Юниcodeро \u000dҳамчун сатри нав мехонад ва codeи моро ба таври зерин мехонад: Компилятор codeро барои ҳалли мушкилот дар Java кушодааст:
public class ExecutableComment {
    public static void main(String[] args) {
        // the line below this gives an output
        // \u000d
        System.out.println("comment executed");
    }
}

Вазифаи Java - 3: ҳалқаи номбаршуда эҷод кунед

Намояндаи дигари силсилаи "масъалаҳои барномасозии амалӣ, Java дар холигии сферикӣ". Ба маънои он ки маълум нест, ки чаро ин зарур аст, аз эҳтимол дур нест, ки давра аз он ки он ғайришахсӣ аст, хафа шавад. Хуб, хуб, чизи дигар муҳим аст: забон ба шумо имкон медиҳад, ки ба давра ном диҳед.

Ҳалли

Эзоҳ: ба баъзеҳо, чунин "номҳо" ҳамчун "тегҳо" маълуманд, ки дар амал истифода бурдан тавсия дода намешавад. Рамз барои ҳалли мушкилот дар Java, намоиши ҳалқаи номбаршуда
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);
            }
        }
    }
}
Агар шумо барномаро иҷро кунед, натиҷа ин аст:
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
Дар ин ҷо шумо инчунин метавонед идома додан ба оғози даври номбурдаро истифода баред. Ва агар лозим бошад, шумо метавонед breakcontinue) -ро дар як ҳалқаи лона if-elseистифода баред for, то бо истифода аз if-else. Ин барои пешгирӣ кардани гузоштани бисёр парчамҳо ва санҷиши онҳо if-elseбарои муайян кардани идома ё баромадан аз ҳалқаи дохилӣ кӯмак мекунад.

Масъалаи Java - 4. Дар бораи ягона такрорӣ дар массиви ададҳои бутун

Бо дарназардошти массиви (ё ArrayList, мувофиқи хоҳиши шумо) ададҳои бутуни дорои унсурҳои Integerаз 1 то 100. Ин массив як ва танҳо як унсури такроршаванда дорад. Чӣ тавр пайдо кардани он? Чунин вазифаҳо барои барномасози Java нисбат ба се супориши қаблӣ бештар шиносанд. Зеро сухан на дар бораи донистани нозукихои забон, ки кариб истифода намешавад, балки мантик меравад. Аввалин импулси бемаънӣ, ки бо қувваи бераҳмона ҳал мешавад, вақте ки саратон фурӯзон мешавад ё муносибати "Ман барномасоз ҳастам, ман оқил ҳастам" хеле зуд нопадид мешавад. Ягона чизи бад он аст, ки ҳангоми мусоҳиба, дар зери фишор, ин метавонад рӯй надиҳад. Пас, пеш аз он ки ба ҳалли масъала назар андозед, ҳоло фикр кунед!

Алгоритм ҳалли чунин аст:

Маблағи ҳамаи рақамҳоро аз 1 то 100 ҳисоб кунед. Мо фикр мекунем, ки шумо ин корро медонед (масалан, бо истифода аз усули машҳури Гаусс) Акнун ҷамъи элементҳои массиви худро ҳисоб кунед ё ArrayList’а. Ва... маблаги якумро аз дуюмаш кам кунед. Бинго! Рақами натиҷавӣ арзиши элементи такрорист. Рамзи ҳалли мушкилоти Java барои 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();
//находим сумму всех элементов списка
        int totalSum = elements.stream().mapToInt(e -> e).sum();
        System.out.println("Элемент, который повторяется : " + (totalSum - distinctSum));
    }

    public static void main(String[] args) {
//создаем список последовательных элементов на промежутке [1..101).
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
//устанавливаем элементу с индексом 53 meaning 23
        elements.set(53, 23);
        findDuplicate(elements);
    }
}
Як ҳалли дигар
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);
        }
        //добавляем дубликат в список
        numbers.add(25);
        Duplicate dn = new Duplicate();
        System.out.println("Элемент, который повторяется: " + dn.findDuplicateNumber(numbers));
    }
}

Масъалаи Java - 5. Дар бораи такрори ғайримуқаррарӣ дар массиви ададҳои бутун

Агар масъалаи қаблӣ ба шумо хеле осон менамуд, пас масъалаи зеринро ҳал кунед: додашуда варақи ададҳои аз 1 то 100. Он дорои такрори (бештар аз як) мебошад. Элементҳоеро, ки зиёда аз як маротиба пайдо мешаванд, чӣ гуна пайдо кардан мумкин аст (худи элементро ёфта, чанд маротиба рух додани онро нишон диҳед)?

Ҳалли

Ҳалли мантиқтарин дар ин ҷо истифодаи сохторе ба монанди , аст HashMap, зеро он маълумотро дар ҷуфтҳои калид-арзиш нигоҳ медорад. Рамз барои ҳалли мушкилоти Java:
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 < >();
//заполняем Map duplicates значениями по принципу:
// ключ – meaning element, meaning – сколько раз он встречается
        elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
//из duplicates убираем все элементы, которые встретorсь не более 1 раза,
//и сохраняем //результат в список (для удобства обработки на следующем шаге)
        List <Map.Entry <Integer, Integer> >
        result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
//выводим результат для всех элементов в списке result
        result.forEach(e -> System.out.println(String.format("Элемент %d  встречается %d раз", 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);
    }
}

Хулоса

Проблемаҳои амалии Java хеле гуногунанд ва шумо намедонед, ки мусоҳиба ба шумо чӣ гуна муаммои номаълумро медиҳад. Бо вуҷуди ин, ҳар як корфармои мувофиқ мефаҳмад, ки аз қобorяти ҳалли мушкилоти Java хеле муҳимтар қобorяти шумо барои ҳалли мушкилоти воқеии амалӣ хоҳад буд , ба монанди онҳое, ки шумо ҳангоми кор дучор мешавед. Пас, онҳоро то ҳадди имкон ҳал кунед. Маҳз барои ҳамин JavaRush офарида шудааст. Дар таҳияи ин мақола маводҳои Geeksforgeeks истифода шудаанд.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION