web-dev-qa-db-fra.com

La sélection d'erreur de lancement Java ne contient pas de type principal

Je suis un novice total en Java et Eclipse. Je cherchai beaucoup d'aide sur Google mais restais confus. Dans Eclipse, je clique sur Exécuter, puis sur Application Java et l’erreur immédiatement. Voici mon code source:

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

Vous ne pouvez pas définir la méthode principale comme vous le faites en C++. 

Pour l'interpréteur Java, la méthode principale doit toujours être publique et statique. Vous devez donc modifier la signature de votre méthode principale en

public static void main(String args[])

Essayez ceci et n'hésitez pas à demander plus. :-)

38
Mudassir

Créez un nouveau projet et indiquez le chemin de génération pour qu'il pointe vers les dossiers source existants. Cela résoudra l'erreur "La sélection ne contient pas de type principal".

12
AndroGeek

J'ai aussi connu ce problème et je pouvais le résoudre. La solution n'a pas encore été mentionnée.

Dans mon cas, je travaille dans Eclipse avec Xtend et j'ai converti le projet en maven. Après cela, il y avait une entrée d'exclusion de source dans votre fichier de chemin de classe:

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

Ensuite, il vous suffit de supprimer cette ligne et de procéder à une nouvelle génération.

1
armin.miedl