webentwicklung-frage-antwort-db.com.de

Die Java-Startfehlerauswahl enthält keinen Haupttyp

Ich bin ein totaler Neuling in Java und Eclipse. Ich googelte für viel Hilfe, aber immer noch verwirrt. Von Eclipse aus klicke ich auf Ausführen und wähle dann Java-Anwendung. Ich erhalte diesen Fehler sofort. Hier ist mein Quellcode:

import Java.util.Arrays;
import Java.util.Scanner;

public class SliceandDice {
    void main(String args[]) {
        System.out.println("This is the BIGGEST program console");
        System.out.println("Each input line will be a pair of numbers separated by a COMMA.");
        System.out.println("First number must be an unsigned number less than 10000. Max example: 9999");
        System.out.println("Second number is the 'target' number.");
        System.out.println("Example of an input line to be typed:");
        System.out.println(" 4721 , 75");
        for (int i = 1; i < 6; i++) // each time in this loop, we have a new
                                    // set.
        {
            System.out.println("Type a pair of numbers according to the syntax rules above:");
            String iLine; // Declare a variable to hold the name.
            Scanner in = new Scanner(System.in);
            iLine = in.nextLine(); // Read one line from the console.
            in.close(); // Note 2
            NumberSet set = ParseRawInput(i, iLine);
            if (set.IsValid()) {
                System.out.println("Valid inputs. Card Number to tear apart:" + set.getCardNumber()
                        + "; Target Number: " + set.getTargetNumber());
                String cardNumber = set.getCardNumber();
                int target = set.getTargetNumber();
                AnalyzeNumber(cardNumber, target); // solve for this set of
                                                   // numbers
            } else {
                System.out.println("Invalid set of numbers. Enter in format: nnnn,tttt");
            }
        }
    }

    private void AnalyzeNumber(String cn, int t) {
        int n = cn.length();
        int m = n;
        int sums = 4 + 3 + 2 + 1;
        int[] possibleAnswers = new int[sums];
        int answer = 0;
        for (int digits = 1; digits < m; digits++) {
            possibleAnswers[answer] = PossibleAnswer(0, digits, cn);
            answer++;
        }
        System.out.println("-----------");
        possibleAnswers[answer] = PossibleAnswer(1, 2, cn);
        answer++;
        possibleAnswers[answer] = PossibleAnswer(1, 3, cn);
        answer++;
        System.out.println("-----------");
        possibleAnswers[answer] = PossibleAnswer(2, 2, cn);
        answer++;
        System.out.println("-----------");
        int finalAnswer = FindBiggestNearTarget(possibleAnswers, t);
        System.out.println("Best sum (closet to target) = " + String.valueOf(finalAnswer));
    }

    private int PossibleAnswer(int extender, int lengthDigits, String cn) {
        // extender => which digit position gets multilength adjustment
        int n = cn.length();
        int[] number = new int[n]; // holds individual addends
        int sum = 0;
        int LEN = 1; // default length when we need it
        String addends = "";
        int i;
        if (extender == 0) {
            i = 0;
            while (i < n) {
                addends += cn.substring(i, lengthDigits) + " + ";
                number[i] = Integer.parseInt(cn.substring(i, lengthDigits));
                sum += number[i];
                i = i + lengthDigits; // always increment at least 1 position
                if (i + lengthDigits > n)
                    lengthDigits = 1;
            }
            System.out.println(addends + " = " + String.valueOf(sum));
            return sum;
        }
        if (extender == 1) {
            i = 0;
            while (i < n) {
                addends += cn.substring(i, LEN) + " + ";
                number[i] = Integer.parseInt(cn.substring(i, LEN));
                sum += number[i];
                if (i == 0) {
                    i++;
                    LEN = lengthDigits;
                } else if (i == 1) {
                    i = i + lengthDigits; // i = 3 (last number)
                    LEN = 1;
                } else if (i == 2) {
                    i = 1;
                    LEN = 3;
                } else {
                    i = n; // force exit of while loop
                }
                if (i + LEN > n)
                    LEN = 1;
            }
            System.out.println(addends + " = " + String.valueOf(sum));
            return sum;
        }
        if (extender == 2) {
            i = 0;
            while (i < n) {
                addends += cn.substring(i, LEN) + " + ";
                number[i] = Integer.parseInt(cn.substring(i, LEN));
                sum += number[i];
                i = i + LEN; // always increment at least 1 position
                if (i == extender) {
                    LEN = lengthDigits;
                }
                if (i + LEN > n)
                    i = n; // force out of loop
            }
            System.out.println(addends + " = " + String.valueOf(sum));
            return sum;
        }
        return 0;
    }

    private int FindBiggestNearTarget(int[] possibles, int target) {
        int[] sumArray = possibles;
        Arrays.sort(sumArray);
        // temporary variable for swapping values
        int temp;
        // reverse the array
        for (int i = 0; i < sumArray.length / 2; ++i) {
            temp = sumArray[i];
            sumArray[i] = sumArray[sumArray.length - i - 1];
            sumArray[sumArray.length - i - 1] = temp;
        }

        for (int i = 0; i < sumArray.length; i++) {
            if (sumArray[i] < target) {
                return sumArray[i];
            }
        }
        return -1; // should not occur
    }

    public static NumberSet ParseRawInput(int i, String rawInput) {
        NumberSet errorSet = new NumberSet(-1, "", 0);
        // string[] stringArray = rawInput.Split( new char[] { ','});
        String[] stringArray = rawInput.toString().split(rawInput, ',');
        if (stringArray.length != 2)
            return errorSet; // ensure 2 tokens separated by comma
        // work on 1st token:
        String cardNumberString = stringArray[0].trim(); // trim any whitespace
                                                         // from this token
        if (cardNumberString.length() > 4)
            return errorSet; // ensure token is 4 bytes or less
        // declare token as integer
        int cardNumber = Integer.parseInt(cardNumberString);

        // work on 2nd token:
        String targetNumberString = stringArray[1].trim(); // trim any
                                                           // whitespace from
                                                           // token
        if (targetNumberString.length() > 4)
            return errorSet; // ensure token is 4 bytes or less

        int targetNumber = Integer.parseInt(targetNumberString); // convert into
                                                                 // int

        NumberSet validSet = new NumberSet(i, cardNumberString, targetNumber);
        return validSet;
    }
}

class NumberSet {
    // Java getter & setter
    private String CardNumber;
    private int TargetNumber;
    private int SetNumber;

    public int getSetNumber() {
        return this.SetNumber;
    }

    public String getCardNumber() {
        return this.CardNumber;
    }

    public int getTargetNumber() {
        return this.TargetNumber;
    }

    public NumberSet(int sn, String cn, int t) {
        this.SetNumber = sn;
        this.CardNumber = cn;
        this.TargetNumber = t;
    }

    public Boolean IsValid() {
        if (this.SetNumber < 0)
            return false;
        return true;
    }
}
19
John Adams

Sie können die Hauptmethode nicht wie in C++ definieren. 

Für den Java-Interpreter muss die Hauptmethode immer public und static sein. Sie müssen also die Signatur Ihrer Hauptmethode in ändern

public static void main(String args[])

Probieren Sie es aus und fragen Sie weiter. :-)

38
Mudassir

Erstellen Sie ein neues Projekt, und legen Sie den Erstellungspfad so fest, dass er auf die vorhandenen Quellordner verweist. Dadurch wird der Fehler "Auswahl enthält keinen Haupttyp" behoben.

12
AndroGeek

Ich habe dieses Problem auch erlebt und konnte es lösen. Die Lösung wurde noch nicht erwähnt.

In meinem Fall arbeite ich in Eclipse mit Xtend und habe das Projekt in maven konvertiert. Danach gab es einen Quell-Ausschluss-Eintrag in Ihrer Klassenpfad-Datei:

<classpathentry excluding="**" kind="src" output="target/classes" path="xtend-gen">

Dann müssen Sie nur diese Zeile löschen und einen sauberen Build durchführen.

1
armin.miedl