找不到符号:Java [重复]
Posted
技术标签:
【中文标题】找不到符号:Java [重复]【英文标题】:Cannot find Symbol: Java [duplicate] 【发布时间】:2012-09-09 20:01:39 【问题描述】:如果这是一个奇怪的问题,我很抱歉,但我刚刚开始 OOP 并遇到了这个问题,我应该制作一个简单的菜单驱动数学程序。我清除了编译器给我的所有错误,但现在它给了我大约 14 个新错误,其中大部分被描述为“找不到符号”。这是我的代码:
import java.util.Scanner;
public class MathMenu
//MENU METHOD
private static void menu(String args[])
int choice;
System.out.printf("Enter '1' to add");
System.out.printf("Enter '2' to subtract");
System.out.printf("Enter '3' to exit");
System.out.printf("\nPlease enter your choice: ");
choice=input.nextInt();
if (choice==1)
sum(n,m);
if (choice==2)
dif(n,m);
else if(choice==3)
return;
//SUM
private static int sum(int a, int b)
return n+m;
//DIFFERENCE
private static int dif(int a, int b)
if(n<m)
return m-n;
else
return n-m;
public static void main(String args[])
int n=15;
int m=8;
Scanner input = new Scanner(System.in);
menu();
这是新的编译器输出:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Shahraiz Tabassam>cd c:\java\bin
c:\java\bin>javac MathMenu.java
MathMenu.java:7: error: no suitable constructor found for Scanner()
private static Scanner input = new Scanner();
^
constructor Scanner.Scanner(ReadableByteChannel,String) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(ReadableByteChannel) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(String) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(Path,Charset) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(Path,String) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(Path) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(File,CharsetDecoder) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(File,String) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(File) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(InputStream,String) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(InputStream) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(Readable) is not applicable
(actual and formal argument lists differ in length)
constructor Scanner.Scanner(Readable,Pattern) is not applicable
(actual and formal argument lists differ in length)
MathMenu.java:64: error: method menu in class MathMenu cannot be applied to give
n types;
menu();
^
required: String[]
found: no arguments
reason: actual and formal argument lists differ in length
2 errors
c:\java\bin>
【问题讨论】:
您在哪里定义您在称为menu
的方法中使用的m
和n
变量?
我使用 m 和 n 是因为我认为只要在方法结构中定义了参数类型,我就可以将它们的值传递给方法而不管它们的名称。
【参考方案1】:
您从未在 menu
方法的主体中定义您的 input
变量。尝试在menu
方法中添加Scanner input = new Scanner(System.in)
。只需在main
中定义变量,not 就可以让menu
访问它。如果你想避免多次创建 Scanner
实例,你可以这样做
import java.util.Scanner;
public class MathMenu
private static Scanner input = new Scanner(System.in);
...
然后您可以在所有方法中使用input
。
编辑:我刚刚注意到
m
和n
有类似的情况:您必须在使用它们的方法中定义它们,或者使它们成为static
字段。如果由我决定,我会这样做:
import java.util.Scanner;
public class MathMenu
private static Scanner input = new Scanner(System.in);
private static int n = 15;
private static int m = 8;
// ...
// your other methods unchanged
// ...
public static void main(String[] args)
menu(args); // or just "menu()" if you remove the arguments from the menu method declaration.
【讨论】:
马上去试试。谢谢! 我认为你在做某事。你能提供一个代码示例吗? 那是非常有效的兄弟。这有助于将其缩小到两个错误 - 我再次更新了编译器输出。如果你能看看那个。那会很有帮助! 我的错误,忘记将System.in
参数添加到 Scanner
构造函数和 menu
方法参数 - 请参阅编辑。现在应该一切正常! :-P
构造函数啊! :) 这是它现在显示的内容: c:\java\bin>javac MathMenu.java MathMenu.java:64: 错误:MathMenu 类中的方法菜单不能用于给出 n 类型;菜单(); ^ required: String[] found: no arguments reason: 实际参数列表和形式参数列表的长度不同 1 错误 c:\java\bin> 这是什么意思?形式参数列表和实际参数列表的长度不同?【参考方案2】:
您没有在程序中定义input
,而是调用了
choice=input.nextInt();
假设你想从用户那里得到输入,你需要有
Scanner input = new Scanner(System.in)
就在choice=input.nextInt();
之前
【讨论】:
谢谢,但我在 main 中定义了? 如果你在 main 中定义了它,你需要将它作为参数传递给 menu() (或者)你可以将它从 main 中删除并放在 menu() 中。【参考方案3】:您的所有函数都获得名为 a & b 的参数,但使用 n & m。改变其中之一。例如:
private static int sum(int n, int m)
return n+m;
【讨论】:
另外,@Nambari 的回答是对我的补充 (+1)。 这样做并帮助将错误缩小到 6 个。其中一些仍然与未找到符号有关,并且一个流浪者说实际参数列表和正式参数列表的长度不同。跨度>以上是关于找不到符号:Java [重复]的主要内容,如果未能解决你的问题,请参考以下文章