私のメソッドの読み込みにエラーがあるのはなぜですか(Scanner sc)?

私はReadメソッドに取り組んでいます。私はそれが動作すると思いますが、 exp =新しいBinEx(ex1、呼び出し、EX2)およびexp =新しいSimEx(トークン)でエラーが発生します。

エラーメッセージは、非静的変数は静的コンテキストから参照できませんです。

誰が問題が何であるか知っていますか? Stevenに応答するためのThanx


import java.util.*;

public abstract class Ex {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Ex exp = read(sc);
        System.out.println(exp.toString());
        System.out.println(exp.eval());

    }

    public abstract String eval();

    /**
     * post: heeft een geldige Expression-String ingevoerd bestaande uit haakjes
     * operanden en operatoren, en heeft een Expression-object geretourneerd dat
     * is samengesteld uit uit SimpleExpressions en BinaryExpressions
     */
    public static Ex read(Scanner sc) {
        String token = sc.next();
        char res = token.charAt(0);
        Ex exp;
        if (res == '(') {
            Ex ex1 = read(sc);
            String operator = sc.next();
            char opr = operator.charAt(0);
            Ex ex2 = read(sc);
            String haakje = sc.next();
            exp = new BinEx(ex1, opr, ex2);
        } else
            exp = new SimEx(token);
        return exp;
    }

    class SimEx extends Ex {

        private String tekst;

       //post: heeft een SimpleExpression object gecreerd met tekst = tk
        public void SimEx(String tk) {
            tekst = tk;
        }

       //post: retouneert tekst
        public String eval() {
            return tekst;
        }

       //post: retourneert een String representatie van een SimpleExpression
        public String toString() {
            String res = "";
        }
    }

    class BinEx extends Ex {

        private Ex   operand1;
        private char operator;
        private Ex   operand2;

       //post: heet een BinaryExpression object gecreëerd met operand1 = op1,
       //operator is or en operand2 = op2
        void BinEx(Ex op1, char or, Ex op2) {
            operand1 = op1;
            operator = or;
            operand2 = op2;
        }

        /**
         * post: indien (operator == "C") retourneert operand1 + operand2,
         * retourneert anders operand2 + operand1
         */
        public String eval() {
            BinEx res;
            if (operator == 'C')
                return operand1 + "" + operand2;
            else
                return operand2 + "" + operand1;
        }

       //post: retourneert een String representatie van een BinaryExpression
        public String toString() {
            String res = "
0
スティーブン、英語に翻訳できますか? SOは英語のみのサイトです。 blog.stackoverflow.com/2009/07/non-english-question-policy 投稿を直接編集する必要があります。
追加された 著者 T.Rob,
英語でお願いします!
追加された 著者 lhballoti,
Stackoverflowは英語のサイトです。みんなが理解できるように投稿を編集してください。 - ディーンは、エンゼルスのサイトです。
追加された 著者 user717572,
今は大丈夫ですか?鉱石を削除したり翻訳したりする必要がありますか?
追加された 著者 Steven van den Berg,

1 答え

私はあなたの言語を話すことはできませんが、私はJavaを話すだけですので、このクラスを使用してください:

import java.util.*;

public  class Ex
{

public static void main(String[] args)
{
    Scanner sc = new Scanner(System.in);
    Ex exp = read(sc);
    System.out.println(exp.toString());
    System.out.println(exp.eval());
}

public  String eval(){return "";};

/**
 * post: heeft een geldige Expression-String ingevoerd bestaande uit haakjes
 * operanden en operatoren, en heeft een Expression-object geretourneerd dat
 * is samengesteld uit uit SimpleExpressions en BinaryExpressions
 */
public static Ex read(Scanner sc)
{
    String token = sc.next();
    char res = token.charAt(0);
    Ex exp;
    if (res == '(')
    {
        Ex ex1 = read(sc);
        String operator = sc.next();
        char opr = operator.charAt(0);
        Ex ex2 = read(sc);
        String haakje = sc.next();
        exp = new BinEx(ex1, opr, ex2);
    }
    else
        exp = new SimEx(token);
    return exp;
}
}
class SimEx extends Ex
{

    private String tekst;

   //post: heeft een SimpleExpression object gecreerd met tekst = tk
    public SimEx(String tk)
    {
        tekst = tk;
    }

   //post: retouneert tekst
    public String eval()
    {
        return tekst;
    }

   //post: retourneert een String representatie van een SimpleExpression
    public String toString()
    {
        String res = "";
    }
}

class BinEx extends Ex
{

    private Ex operand1;
    private char operator;
    private Ex operand2;

   //post: heet een BinaryExpression object gecreëerd met operand1 = op1,
   //operator is or en operand2 = op2
    public BinEx(Ex op1, char or, Ex op2)
    {
        operand1 = op1;
        operator = or;
        operand2 = op2;
    }

    /**
     * post: indien (operator == "C") retourneert operand1 + operand2,
     * retourneert anders operand2 + operand1
     */
    public String eval()
    {
        BinEx res;
        if (operator == 'C')
            return operand1 + "" + operand2;
        else
            return operand2 + "" + operand1;
    }

   //post: retourneert een String representatie van een BinaryExpression
    public String toString()
    {
        String res = "

基本的にあなたの括弧はうんざりしていました。

0
追加された
それは実際にはオランダ語のようです。 :)
追加された 著者 Tudor,
私の悪い私はより政治的に正しいだろう
追加された 著者 aeoliant,
ああ!それは今働く;)私は今私の課題にさらに取り組むことができます!はい、それはオランダです:P私は英語で私の次の質問をします;)
追加された 著者 Steven van den Berg,