2010-11-23 88 views
19

我是Java和Eclipse中的新手。我搜索了很多幫助,但仍然困惑。從Eclipse中,我單擊運行,然後選擇Java應用程序,然後立即出現此錯誤。這裏是我的源代碼:Java啓動錯誤選擇不包含主要類型

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

我曾經忘記將錯誤的`Main`重命名爲所需的`main`。 ;) – n611x007 2014-07-07 10:57:34

+0

[錯誤:選擇不包含主要類型]的可能重複(http://stackoverflow.com/questions/16225177/error-selection-does-not-contain-a-main-type) – jww 2014-09-30 05:50:34

回答

38

您不能像在C++中那樣定義主要方法。

對於Java解釋器,主要方法必須始終是公共和靜態的。因此,您需要將主要方法簽名更改爲

public static void main(String args[]) 

請嘗試此操作,並隨時提出要求。 :-)

+1

謝謝..在「戰火之炎」中深夜發佈的問題。我現在看到你在8分鐘內回答了我!哇。我肯定會回來一些更多的問題。 – 2010-12-07 21:09:17

12

創建一個新項目並使構建路徑指向現有的源文件夾。這將解決「選擇不包含主類型」錯誤。

1

我也遇到過這個問題,可以解決它。該解決方案尚未提及。

在我的情況下,我在Eclipse中使用Xtend工作,並將該項目轉換爲maven。之後,有你的classpath文件中的源排除項:

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

然後你只需要刪除這一行,做一個乾淨的構建。