[FIXED] Lesen einer Programmdatei und Zählen der Kommentare in dieser Datei basierend auf Zeichen

Ausgabe

Ich versuche, ein Programm zu erstellen, das eine Datei als Eingabe verwendet und dann die Anzahl der Kommentare in dieser Datei zählt. Dazu habe ich einen Switch-Case erstellt.

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

public class Main {

    public static void main(String[] args) throws FileNotFoundException {

        String file = new Scanner(new
                File("file")).useDelimiter("\\Z").next();

        int length, state, i, j;
        state = 0;
        i = 0;
        j = 0;

        while (i < file.length()) {
            switch (state) {
                case 0:
                    if (file.charAt(i) == '/') {
                        state = 1;
                        i++;
                    } else i++;
                    break;
                case 1:
                    if (file.charAt(i) == '*') {
                        state = 2;
                        i++;
                    } else i++;
                    break;
                case 2:
                    if (file.charAt(i) == '*') {
                        state = 3;
                        i++;
                    } else i++;
                    break;
                case 3:
                    if (file.charAt(i) == '/') {
                        state = 4;
                        i++;
                        j++;
                    } else {
                        state = 2;
                        i++;
                    }
                    break;
                case 4:
                    i++;
                    break;

                default:
                    String nothing = "nothing";
            }



        }
        System.out.println("Number of comments " + j);


    }

Das Problem hier ist, dass es bis zu 1 Kommentar im Code funktioniert. Wenn beispielsweise keine Kommentare vorhanden sind, lautet die Ausgabe:

#include <stdio.h>
int main()
{
   int marks, i, num;
}
Number of comments: 0

Wenn 1 existiert:

#include <stdio.h>
int main()
{
   /* comment */
   int marks, i, num;
}
Number of comments: 1

Wenn 2 vorhanden sind:

#include <stdio.h>
int main()
{
   /* comment */
   /* comment 2 */
   int marks, i, num;
}
Number of comments: 1

Das Problem ist, dass es meinen Switch-Fall zu verlassen scheint, sobald es das erste findet. Gibt es eine Möglichkeit, diesen Fall wieder in die Schleife zu bringen und von vorne zu beginnen?

Lösung

Das Problem mit Ihrem Ansatz ist, wenn der Status auf 4 gesetzt ist … wenn ein Kommentarblock erkannt wird. Stattdessen sollten Sie im Block von Fall 3 state = 4 durch state = 0 ersetzen.


Beantwortet von –
Ankit Kumar Maurya


Antwort geprüft von –
Pedro (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like