हाइपरस्किल पर जावा सीखना। रणनीति विषय पर अटक जाओ। समुदाय गैर प्रतिक्रियाशील है और मुझे समझ में नहीं आता कि मुझे सही परिणाम क्यों नहीं मिल रहा है। कृपया मदद करे। मुझे लगता है कि मुझे यह नहीं मिल रहा है कि इस भाग का वास्तव में क्या अर्थ है: "यदि सरणी खाली है, तो खोजक को न्यूनतम मान और इंटीजर खोजने के मामले में इंटीजर। MAX_VALUE वापस करना चाहिए। अधिकतम मूल्य खोजने के मामले में इंटीजर। MIN_VALUE।"

import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;
import java.util.ArrayList;

class Finder {

    private FindingStrategy strategy;

    public Finder(FindingStrategy strategy) {
        this.strategy = strategy;
    }

    /**
     * It performs the search algorithm according to the given strategy
     */
    public int find(int[] numbers) {
       return this.strategy.getResult(numbers);
    }
}

interface FindingStrategy {

    /**
     * Returns search result
     */
    int getResult(int[] numbers);

}

class MaxFindingStrategy implements FindingStrategy {
    @Override
    public int getResult(int[] numbers) {
        if (numbers.length > 0 ){
            Arrays.sort(numbers);
            return numbers[0];
        } else {
            return Integer.MIN_VALUE;
        }

    }
}

class MinFindingStrategy implements FindingStrategy {
    @Override
    public int getResult(int[] numbers) {
        if (numbers.length > 1 ){
            Arrays.sort(numbers);
            return numbers[numbers.length-1];
        } else {
            return Integer.MAX_VALUE;  
        }
    }
}

/* Do not change code below */
public class Main {

    public static void main(String[] args) {

        final Scanner scanner = new Scanner(System.in);

        final String[] elements = scanner.nextLine().split("\\s+");
        int[] numbers = null;

        if (elements[0].equals("EMPTY")) {
            numbers = new int[0];   
        } else {
            numbers = new int[elements.length];
            for (int i = 0; i < elements.length; i++) {
                numbers[i] = Integer.parseInt(elements[i]);
            }
        }

        final String type = scanner.nextLine();

        Finder finder = null;

        switch (type) {
            case "MIN":
                finder = new Finder(new MinFindingStrategy());
                break;
            case "MAX":
                finder = new Finder(new MaxFindingStrategy());
                break;
            default:
                break;
        }

        if (finder == null) {
            throw new RuntimeException(
                    "Unknown strategy type passed. Please, write to the author of the problem.");
        }

        System.out.println(finder.find(numbers));
    }
}
0
Andrey Tutubalin 19 जुलाई 2020, 03:34

2 जवाब

सबसे बढ़िया उत्तर

मैं इस नौकरी के लिए धाराओं का उपयोग करूंगा:

Arrays.stream(numbers).min().orElse(Integer.MIN_VALUE);

Arrays.stream(numbers).max().orElse(Integer.MAX_VALUE);

चूंकि इस स्ट्रीम के साथ आपको numbers.length की जांच करने की आवश्यकता नहीं है, यह numbers.length > 0 के बजाय numbers.length > 1 चेक करने की आपकी समस्या को भी हल करता है।

0
Oboe 19 जुलाई 2020, 05:06

विचार यह है कि जब कोई इनपुट उपलब्ध नहीं है तो आपको या तो Integer.MAX_VALUE या Integer.MIN_VALUE वापस करना होगा। यदि अनुरोध इनपुट से न्यूनतम मान ज्ञात करना है, लेकिन इनपुट खाली है, तो आप Integer.MAX_VALUE लौटाते हैं और वैकल्पिक रूप से यदि इनपुट खाली है और अधिकतम अनुरोध किया जाता है तो आप Integer.MIN_VALUE वापस कर दें।

आपकी विशिष्ट समस्या इस वजह से है;

if (numbers.length > 1 ){

आपको यह जांचना होगा कि लंबाई> 0, 1 नहीं।

2
Jason 19 जुलाई 2020, 03:40