-1

これが奇妙な質問である場合は申し訳ありませんが、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>
4

3 に答える 3

1

メソッドinputの本体で変数を定義したことがありません。メソッド内にmenu追加してみてください。で変数を定義するだけでは、アクセスできません。インスタンスを複数回作成することを避けたい場合は、次のようにすることができますScanner input = new Scanner(System.in)menumainmenuScanner

import java.util.Scanner;

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

input次に、すべてのメソッドから 使​​用できます。


編集m: and に似たものがあることに気付きました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.
    }
}
于 2012-09-17T15:06:32.520 に答える
1

すべての関数はa & bという名前の引数を取得しますが、n & m で機能します。それらの 1 つを変更します。例えば:

private static int sum(int n, int m)
{
    return n+m;
}
于 2012-09-17T15:04:41.217 に答える
1

プログラムで定義していませんinputが、呼び出しています

選択=input.nextInt();

ユーザーからの入力を取得したい場合、次のものが必要です。

Scanner input = new Scanner(System.in)  

直前choice=input.nextInt();

于 2012-09-17T15:04:49.097 に答える