我已经声明了一个main类,在其中我正在调用main函数。我在类Main中调用push和pop函数时,已经在类堆栈中注释了main函数。我已经提交了代码和我面临的错误。
代码:
public class Stack {
//public static void main(String[] args) {
// TODO Auto-generated method stub
static final int max = 10;
int top = -1;
int a[]= new int[max];
static void push(int data)
{
if (top>=max -1)
System.out.println("OVerflow");
else
a[++top]= data;
}
static int pop()
{
if (top<0)
System.out.println("Empty Stack");
else
{int x = a[--top];
return x;
}
}
}
//}
class main {
public static void main(String[] args) {
Stack s = new Stack();
s.push(10);
s.push(20);
s.pop();
s.push(9);
s.pop();
for (i =0; i< 10;i++)
{
System.out.println(a[i]);
}
}
}
错误:
Error: Main method not found in class Stack, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
答案 0 :(得分:0)
发生错误的原因是您需要告诉编译器main方法在哪里。您需要在编辑器中找到“运行配置”选项,然后从那里开始运行“ Main”而不是“ Stack”。我正在使用Eclipse IDE。
固定代码FINAL:
package foo;
public class Stack {
private final int max = 10;
private int top = -1;
private int a[] = new int[max];
public int[] getA() {
return a;
}
public void push(int data) {
if (top >= max - 1)
System.out.println("OVerflow");
else
a[++top] = data;
}
public int pop() {
if (top < 0)
System.out.println("Empty Stack");
else {
int x = a[--top];
return x;
}
return top;
}
}
class Main {
public static void main(String[] args) {
Stack s = new Stack();
s.push(10);
s.push(20);
s.pop();
s.push(9);
s.pop();
int[] a = s.getA();
for (int i = 0; i < 10; i++) {
System.out.println(a[i]);
}
}
}
答案 1 :(得分:0)
您的代码在更改类访问说明和消除了一些错误之后才能工作。 (我正在使用eclipse)
class Stack {
static final int max = 10;
static int top = -1;
static int a[] = new int[max];
static void push(int data) {
if (top >= max - 1)
System.out.println("OVerflow");
else
a[++top] = data;
}
static int pop() {
int x = 0;
if (top < 0)
System.out.println("Empty Stack");
else {
x = a[--top];
return x;
}
return x;
}
}
class main {
public static void main(String[] args) {
Stack s = new Stack();
s.push(10);
s.push(20);
s.pop();
s.push(9);
s.pop();
for (int i = 0; i < 10; i++) {
System.out.println(s.a[i]);
}
}
}
答案 2 :(得分:0)
这是另一种可能的解决方案,包括公共类“ Stack”中的main方法。另外,您在使用静态方法,则需要全局静态变量。
public class Stack {
// public static void main(String[] args) {
// TODO Auto-generated method stub
static final int max = 10;
static int top = -1;
static int a[] = new int[max];
static void push(int data) {
if (top >= max - 1)
System.out.println("OVerflow");
else
a[++top] = data;
}
static int pop() {
if (top < 0)
System.out.println("Empty Stack");
else {
int x = a[--top];
return x;
}
return 0;
}
public static void main(String[] args) {
// Stack s = new Stack();
push(10);
push(20);
pop();
push(9);
pop();
for (int i = 0; i < 10; i++) {
System.out.println(a[i]);
}
}
}
输出: 10 9 0 0 0 0 0 0 0 0
答案 3 :(得分:0)
您需要先解决一些问题,以便编译代码。
您正在使用Stack
的{{1}}类的对象,因此Stack s = new Stack();
需要将don't
和push()
方法设置为pop()
从方法声明中删除static
。看起来像
static
另一个问题是您的void push(int data)
{
if (top>=max -1)
System.out.println("OVerflow");
else
a[++top]= data;
}
方法。您给了返回类型pop()
。因此,它必须始终返回int
。方法的最后一行应包含一个返回值int
。因此,您应该将int
的值更改为
pop()
您的int pop() {
int poppedValue = 0;
if (top < 0)
System.out.println("Empty Stack");
else {
poppedValue = a[--top];
}
return poppedValue;
}
类无权访问main
类的Stack
,但是您尝试遍历它。您可以在int[] a
类中添加一个方法以返回Stack
数组。
int[] a
因此,在public int[] getStack() {
return a;
}
方法中的push()
和pop()
之后,您可以通过以下方式检索数组。
main()
您的最后一个问题是在int [] a = s.getStack();
循环中。您必须指定for
的数据类型。因此您的循环应该看起来像
i
还请注意,由于您是从 int [] a = s.getStack();
for (int i =0; i< 10;i++)
{
System.out.println(a[i]);
}
对象a
获得array
Stack
的,因此循环主体将能够访问s
编译错误。
答案 4 :(得分:-1)
您需要将main方法放置在公共类中。因此,要么使class main成为公共类,而使Stack类成为默认访问权限,要么将main方法移入Stack类内部并处置main类。
第一个解决方案:
class Stack{
//...
}
public class Main{
public static void main(String[] args){
}
}
第二种解决方法:
public class Stack {
//...
public static void main(String[] args){
}
}
另请参阅:What if main method is inside "non public class" of java file?