मेरे पास 2 टेक्स्ट फाइलें हैं जिनमें संख्याएं (पूर्णांक) हैं जो आरोही क्रम में क्रमबद्ध हैं। अब मैं एक नई टेक्स्ट फाइल बनाना चाहता हूं जिसमें दोनों फाइलों के सभी नंबर हों। दूसरे शब्दों में, दो फाइलों के मूल्यों को एक नई फाइल में मिला दिया जाना चाहिए। नई फाइल में संख्याएं भी आरोही क्रम में होनी चाहिए।

उदाहरण के लिए:
फ़ाइल1: 1 3 5 7 9
फ़ाइल2: 2 4 6 8 10
नई फ़ाइल में शामिल होना चाहिए: 1 2 3 4 5 6 7 8 9 10

मेरे द्वारा बनाई गई विधि में, समस्या यह है कि यह दोनों फाइलों में पहले नंबरों को स्कैन करना शुरू कर देता है file1: 1 file2: 2। यह पता चलता है कि फ़ाइल 1 में संख्या सबसे कम है, स्कैनर दोनों फाइलों में अगले नंबर पर चला जाता है। तो अगली चीज़ जो स्कैन की जा रही है वह है file1:3 file2:4. फिर यह 3 है जो सबसे कम है। हालांकि, पहले स्कैन से नंबर 2 और दूसरे स्कैन से नंबर 4 को छोड़ दिया गया है। यहाँ मेरा कोड अब तक है:

    public static void mergeAllNumbers(String fileName1, String fileName2, String fileNameNew)
        throws FileNotFoundException {
    Scanner scanFile1 = new Scanner(new File(fileName1));
    Scanner scanFile2 = new Scanner(new File(fileName2));
    PrintWriter writeToFile = new PrintWriter(fileNameNew);

    // merge as long as there is something in both files
    while (scanFile1.hasNextInt() && scanFile2.hasNextInt()) {
        int value1 = scanFile1.nextInt();
        int value2 = scanFile2.nextInt();

        if (value1 <= value2) {
            // The number in fileName1 is less
            writeToFile.write(value1 + "");
            writeToFile.write(System.getProperty("line.separator"));

        } else { // The number in fileName2 is less
            writeToFile.write(value2 + "");
            writeToFile.write(System.getProperty("line.separator"));
        }
    }

    // empty the file which is not empty
    while (scanFile1.hasNextInt()) {
        int value1 = scanFile1.nextInt();
        writeToFile.write(value1 + "");
        writeToFile.write(System.getProperty("line.separator"));
    }
    while (scanFile2.hasNextInt()) {
        int value2 = scanFile2.nextInt();
        writeToFile.write(value2 + "");
        writeToFile.write(System.getProperty("line.separator"));
    }
    scanFile1.close();
    scanFile2.close();
    writeToFile.close();
}
1
user3740970 19 मई 2018, 16:30

1 उत्तर

चूंकि आप दोनों फाइलों पर .nextInt() का उपयोग कर रहे हैं, आप हमेशा उस नंबर को खो देंगे जिसका आप उपयोग नहीं करते हैं। आप दोनों को दो अलग-अलग सरणियों में पढ़ सकते हैं, और फिर उन पर मर्ज सॉर्ट कर सकते हैं। https://www.geeksforgeeks.org/merge-sort/

0
Benjamin Ellsworth 19 मई 2018, 16:37