ठीक है, मैं आउटपुट को एक निश्चित तरीके से देखने की कोशिश कर रहा हूं। 10 नंबर नई लाइन प्रिंट करें। लूप 4 के माध्यम से चलने के बाद किसी कारण से यह i को 0 पर सेट करता है। मैं वह फ़ाइल डालूंगा जो मैं पहले से पढ़ रहा हूं। मैं अंततः इसे एक नई फाइल में लिखना चाहता हूं। यह एक कक्षा के लिए है, केवल एक सत्रीय कार्य है और मैं आप लोगों से सत्रीय कार्य करने के लिए नहीं कह रहा हूँ। (मूल रूप से मुझे फ़ाइल को पढ़ना है और पहली फ़ाइल में निर्दिष्ट नाम के साथ एक नई फ़ाइल में लिखना है। और केवल पहली फ़ाइल के शीर्ष पर संख्याओं की संख्या का उपयोग करें।

Txt फ़ाइल की सामग्री:

MyOutput.txt 23 
20 1 4 5 7 
45
 1 2 3 4 5 6 7 8 9 77 88 99 23 34 
56 66 77 88 99 100 110 120

और कोड ...

package reading_with_exceptions;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;

public class inputFilename {


    static Scanner kbInput = new Scanner(System.in);

    public static void main(String[] args) {
        String lines = null;
        Scanner inFile = null;
        int count = 0;
        boolean metCount = false;
        // TODO Auto-generated method stub
        try {
            inFile = new Scanner(new FileReader("src/MyInput.txt"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        lines = inFile.nextLine();
        lines.trim();

        //Now check to see if line is empty
        //If not empty get the ouput file name and number of lines from file
        if(lines.length()>0) {        
            String outPutFile = lines.substring(0, lines.indexOf(' '));
            String numNumbers = lines.substring((lines.indexOf(' ')+1), (lines.length()-1));
            numNumbers.trim();
            count = Integer.parseInt(numNumbers);
            System.out.print(outPutFile+"  ");
            System.out.println(count);
        }

        //


        //check if there is another line in the file
        int i=0;
        while(inFile.hasNextLine() && !metCount) {

            lines = inFile.nextLine();
            String[] separated = lines.split(" ");

            for( i = 0; i<separated.length; i++) {

                System.out.print(separated[i]+"  ");

                if((i+1) % 10 ==0) {
                    System.out.println("...");
                }
                //System.out.print("  spot:"+i+" ");
                //System.out.println("i:" +i  +"count:"+count);
                if(i>=count)
                    metCount = true;

            }

        }
    }
}

...

मैंने ग्रहण में कदम उठाने की कोशिश की है और अभी भी समस्या का समाधान नहीं कर सकता है। यह केवल हर बार होता है। पहली गिनती 4 तक जाती है दूसरी गिनती 10 तक जाती है तीसरी 4 तक जाती है आदि।

1
TwoEyedDan 17 मई 2020, 22:21

1 उत्तर

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

आप आउटपुट की पहली पंक्ति हैं count को 23 के रूप में आउटपुट करते हैं।

प्रसंस्करण बंद हो जाता है क्योंकि आप अपने स्ट्रिंग टोकन गिनती के साथ तुलनित्र के रूप में लाइन गिनती का उपयोग कर रहे हैं ...

इसलिए मेटकाउंट लूप में true पर सेट हो जाता है और प्रोग्राम समाप्त हो जाता है

मैंने कुछ सुधारों के साथ कोड संपादित किया है ताकि आप इसे और अधिक स्पष्ट रूप से समझ सकें ...

मैंने कुछ हिस्सों को विधियों से निकाला है ताकि टिप्पणियों की आवश्यकता के बजाय आपके पास नामित विधि हो।

package reading_with_exceptions;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class inputFilename {

    static Scanner kbInput = new Scanner(System.in);

    public static void main(String[] args) {
        Scanner inFile = open("src/MyInput.txt");

        /**
         * First check you have a first line.
         */
        if (!inFile.hasNext()) {
            throw new IllegalStateException("File is empty");
        }
        String header = inFile.nextLine().trim();

        /**
         * Check first line is not blank
         */
        if(isBlank(header)) {
            throw new IllegalStateException("First line has no content");
        }

        /**
         * Get filename and total line count from file
         */
        String filename = getFilename(header);
        int totalLines = getNumberOfLines(header);

        /**
         * output results to console on one line
         */
        System.out.println(filename + "  " + totalLines);

        /**
         * iterate over/process the lines one by one (but not the last line)
         * This whole process could be put in a method named processLines(...) with relevant arguments passed.
         * The more you nest your code, the harder it becomes to read/debug... and the easier it is for bugs to hide.
         * The more your variables have meaningless names (i, j, k) the harder it is to follow.
         * Tip: try to use methods and work on small bits of code at a time... much easier to read and understand a
         * single, well named function with less steps to it than one large function.
         */
        boolean isLastLine = false;

        while(inFile.hasNextLine() && !isLastLine) {

            String[] separated = inFile.nextLine().split(" ");

            for(int tokenCount = 0; tokenCount < separated.length; tokenCount++) {
                /**
                 * print out the token
                 */
                System.out.print(separated[tokenCount]+"  ");

                /**
                 * continue on a new line after every 10th token is printed to the console
                 */
                newLineAfterTenthTokenInASingleLine(tokenCount);

                /**
                 * here when `tokenCount` passes over the 23rd item (`separated[tokenCount]`),
                 * `metCount` is set to `true` and the program ends.
                 * This is probably not what's wanted as you want to compare a `lineCount` to the `totalLines`, not the `tokenCount`
                 */
                if(tokenCount>=totalLines) { // <<<<<<<<<<<<<<<<< HERE'S THE PROBLEM
                    isLastLine = true;
                }
            }
        }
    }

    private static void newLineAfterTenthTokenInASingleLine(int tokenId) {
        if((tokenId+1) % 10 == 0) {
            continueOnNewLine();
        }
    }

    private static boolean isBlank(String firstLine) {
        return firstLine.length()==0;
    }

    private static Scanner open(String inFile) {
        try {
            return new Scanner(new FileReader(inFile));
        } catch (FileNotFoundException e) {
            throw new
        }
    }

    private static void continueOnNewLine() {
        System.out.println("...");
    }

    private static int getNumberOfLines(String header) {
        int beginIndex = header.indexOf(' ') + 1;
        int endIndex = header.length() - 1;
        return Integer.parseInt(header.substring(beginIndex, endIndex).trim());
    }

    private static String getFilename(String header) {
        int beginIndex = 0;
        int endIndex = header.indexOf(' ');
        return header.substring(beginIndex, endIndex);
    }
}
0
Rob Evans 17 मई 2020, 23:17