有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

oop找不到符号: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 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>

共 (3) 个答案

  1. # 1 楼答案

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

    choice=input.nextInt();

    假设您想从用户那里获得输入,您需要

    Scanner input = new Scanner(System.in)  
    

    就在choice=input.nextInt();之前

  2. # 2 楼答案

    您从未在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.
        }
    }
    
  3. # 3 楼答案

    所有函数都将参数命名为a&;b,但与n&;m。换一个。例如:

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