2010-11-23 8 views
19

Soy un novato total en Java y Eclipse. Busqué mucha ayuda en Google pero aún estoy confundido. Desde Eclipse, hago clic en ejecutar, luego selecciono la aplicación Java y obtengo este error inmediatamente. Aquí está mi código fuente:La selección de error de inicio de Java no contiene un tipo principal

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; 
    } 
} 
+0

Una vez olvidé cambiar el nombre de mi 'Main' erróneo al' principal' requerido. ;) – n611x007

+0

posible duplicado de [Error: la selección no contiene un tipo principal] (http://stackoverflow.com/questions/16225177/error-selection-does-not-contain-a-main-type) – jww

Respuesta

38

No puede definir el método principal como lo hace en C++.

Para el intérprete de Java, el método principal debe ser siempre público y estático. Por lo tanto, debe cambiar la firma de su método principal a

public static void main(String args[]) 

Pruebe esto y no dude en preguntar más. :-)

+1

Gracias .. pregunta publicada a altas horas de la noche en el "calor de la batalla". ¡Ahora veo que me respondiste en 8 minutos! Guau. Volveré aquí con algunas preguntas más, estoy seguro. –

+1

Usted es siempre bienvenido. – Mudassir

+1

Observe que 'main' está en minúsculas. (Esto me atrapó, culpo al cansancio) –

12

Cree un nuevo proyecto y cree la ruta de compilación para que apunte a las carpetas de origen existentes. Esto resolverá el error "La selección no contiene un tipo principal".

+0

¿Cómo hacer eso? ¿Puedes explicarlo más claramente? – oiyio

+1

Soy un programador de Java bastante experimentado y esto funcionó para mí. Haga clic derecho en la carpeta de origen (src /) que desea utilizar y luego seleccione "Agregar ruta de compilación" o "Configurar ruta de compilación". Si haces esto último, especifica la carpeta src /. –

1

También experimenté este problema y podría resolverlo. La solución no fue mencionada aún.

En mi caso, estoy trabajando en Eclipse con Xtend y he convertido el proyecto en maven. Después de que había una entrada de fuente de exclusión en el archivo de ruta de clases:

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

A continuación, sólo tiene que borrar esta línea y hacer una construcción limpia.

Cuestiones relacionadas