找不到符号:Java

我很抱歉,如果这是一个奇怪的问题,但我刚刚开始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 mn; else return nm; } 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方法的主体中定义input变量。 尝试在menu方法中添加Scanner input = new Scanner(System.in) 。 简单地在main中定义变量不会menu访问它。 如果您想避免多次创建Scanner实例,可以执行类似的操作

 import java.util.Scanner; public class MathMenu { private static Scanner input = new Scanner(System.in); ... } 

然后,您可以使用所有方法的input


编辑 :我刚刚注意到mn类似的东西:你必须在它们被使用的方法中定义它们,或者使它们成为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. } } 

你的所有函数都得到名为a&b的参数,但与n&m一起使用 。 改变其中一个。 例如:

 private static int sum(int n, int m) { return n+m; } 

您没有在程序中定义input ,而是调用

选择= input.nextInt();

假设您想要获得用户的输入,您需要拥有

 Scanner input = new Scanner(System.in) 

就在choice=input.nextInt();