Java 启动错误选择不包含主类型
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4252472/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java launch error selection does not contain a main type
提问by John Adams
I am a total newbie in Java and Eclipse. I googled for lots of help but still confused. From Eclipse I click run then choose Java application and I get this error immediately. Here is my source code:
我是 Java 和 Eclipse 的新手。我用谷歌搜索了很多帮助,但仍然很困惑。从 Eclipse 我单击运行然后选择 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;
}
}
采纳答案by Mudassir
You cannot define the main method as you do in C++.
您不能像在 C++ 中那样定义 main 方法。
For the Java interpreter, the main method must always be public and static. So you need to change your main method signature to
对于 Java 解释器,main 方法必须始终是公共和静态的。所以你需要将你的主要方法签名更改为
public static void main(String args[])
Try this, and feel free to ask further. :-)
试试这个,并随时进一步询问。:-)
回答by AndroGeek
Create a new project and make the build path to point to the existing source folders. This will resolve the "Selection does not contain a main type" error.
创建一个新项目并使构建路径指向现有的源文件夹。这将解决“选择不包含主要类型”错误。
回答by armin.miedl
I also experienced this problem and could solve it. The solution was not mentioned yet.
我也遇到过这个问题并且可以解决。尚未提及解决方案。
In my case I'm working in Eclipse with Xtend and I converted the project to maven. After that there was a source-exclusion entry in your classpath file:
就我而言,我正在使用 Xtend 在 Eclipse 中工作,并将项目转换为 maven。之后,您的类路径文件中有一个源排除条目:
<classpathentry excluding="**" kind="src" output="target/classes" path="xtend-gen">
Then you just need to delete this line and do a clean build.
然后你只需要删除这一行并进行干净的构建。