तो मैं जावा के लिए नया हूं और मैं वर्तमान में टेक्स्टफाइल को पढ़ने के तरीके के बारे में सीख रहा हूं। मैं एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो उपयोगकर्ता से एक समय में एक लाइन इनपुट पढ़ता है, और जब मैं ctrl + z दबाता हूं, तो इसे केस-असंवेदनशील क्रमबद्ध क्रम में सभी लाइनों को आउटपुट करना चाहिए। मैं संग्रहों का उपयोग करने के तरीके के बारे में थोड़ा उलझन में हूं और मैंने एक समान उदाहरण का पालन करने का प्रयास किया जो मुझे ऑनलाइन मिला। हालांकि, जब मैं अपना प्रोग्राम चलाता हूं, तो यह कुछ भी सॉर्ट किए बिना जो कुछ भी दर्ज करता है उसे आउटपुट करता है। मैं क्या गलत कर रहा हूं?

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
    List<String> listStrings = new ArrayList<>();
    String line;
    while((line = r.readLine()) != null) {
        listStrings.add(line);
    }

    Collections.sort(listStrings);

    Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);

    Collections.sort(listStrings, Collections.reverseOrder());

    Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);

//  Collections.reverse(listStrings);

    for (String text: listStrings) {
        w.println(text);
    }
}
1
Dobrikella 21 सितंबर 2019, 23:55

1 उत्तर

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

आपका कोई भी Collections._____() आमंत्रण कुछ भी प्रिंट नहीं करेगा। वे केवल अंतर्निहित संग्रह (listStrings) पर काम करते हैं। तो, यहां प्रत्येक चरण के बाद आप क्या हासिल करने की उम्मीद करते हैं:

//listStrings
Collections.sort(listStrings);
//listStrings sorted alphabetically, case sensitive
Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);
//listStrings sorted alphabetically, case insensitive
Collections.sort(listStrings, Collections.reverseOrder());
//listStrings sorted alphabetically in reverse order, case insensitive
Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);
//listStrings sorted alphabetically, case insensitive
Collections.reverse(listStrings);
//listStrings sorted alphabetically in reverse order, case insensitive

अंत में, इन सभी परिवर्तनों को listStrings में करने के बाद, आप संग्रह को प्रिंट करने का प्रयास करते हैं। आप यहां जिस समस्या का सामना कर रहे हैं, वह यह है कि आप वास्तव में आउटपुट स्ट्रीम को फ्लश नहीं करते हैं, जो कि बफर होने की संभावना है। तो, कुछ भी मुद्रित नहीं किया जाएगा। मैंने listStrings पर ठीक वैसा ही प्रभाव डालने के लिए आपके कोड को फिर से लिखा है, और आउटपुट को प्रिंट करें, जैसे:

public static void doIt(BufferedReader r, PrintWriter w) throws IOException
{
    List<String> listStrings = new ArrayList<>();
    String line;
    while((line = r.readLine()) != null)
    {
        listStrings.add(line);
    }

    Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER.reversed());

    for(String text : listStrings)
    {
        w.println(text);
    }
    w.flush();
}

मैं इसे अपनी मुख्य विधि से इस प्रकार कहता हूं:

public static void main(String[] args) throws Exception
{
    doIt(new BufferedReader(new InputStreamReader(System.in)), new PrintWriter(System.out));
}

यहाँ परिणामी प्रभाव है:
इनपुट:

ABCD
bcde
fegh
ijkl

आउटपुट:

ijkl
fegh
bcde
ABCD
1
Avi 22 सितंबर 2019, 00:15