【问题标题】:<identifier> expected (Java)<标识符> 预期 (Java)
【发布时间】:2014-04-06 13:48:05
【问题描述】:

我是 Java 新手。我正在编写将创建一个帕斯卡三角对象的代码和一个允许我获得牛顿二项式因子值的方法。我得到了一个神秘的“预期”错误,它并没有告诉我太多。我已经通过 Google 和 SO 进行了搜索,但无济于事。我很抱歉我的母语中的 cmets 和班级名称,但这就是导师想要的。如果有帮助的话,我有在 C++ 中工作的代码。

问题出在第 17 行和第 56 行(方法和构造函数)。

这是类的代码:

package kp_lista04_java;

import java.util.List;
import java.util.ArrayList;

class TrojkatPascalaException extends Exception {
    TrojkatPascalaException(String w) {super(w);}
}

class TrojkatPascala {
    private List<List<Integer>> matrix;
    private List<Integer> row_final;
    private List<Integer> row_temporary;

    public int wspolczynnik (int param_r, int param_p) throws (TrojkatPascalaException) {
        // r - numerator wiersza Pascala
        int r = param_r;
        // p - numerator elementu wiersza Pascala
        int p = param_p;
        if (p < 0 || p > r) {
            throw new TrojkatPascalaException("    Element " + p + ": index out of range");
        }
        else {
            // q - wartosc zadanego elementu
            // wiemy, ze zerowe i ostatnie elementy sa zawsze rowne 1
            int q;
            if (p == 0 || p == r) {
                q = 1;
            }
            // wiemy, ze pierwsze i przedostatnie elementy
            // sa rowne numerowi wiersza
            else if (p == 1 || p == r-1) {
                q = r;
            }
            // przejscie (funkcja w rozumieniu matematycznym)
            // miedzy wierszem trojkata Pascala
            // a zapisanym w pamieci wektorem

            // w - numerator elementu wektora
            else {
                int w;
                if (p < Math.ceil((float) r/2)) {
                    w = p - 2;
                }
                else {
                    w = r - p - 2;
                }
                q = matrix.get(r).get(w);
            }
            return q;
        }
    }

    TrojkatPascala (int n_param) throws (TrojkatPascalaException) {
        int n = n_param;
        if (n < 0) {
            throw new TrojkatPascalaException("Row " + n + ": index out of domain");
        }
        else {
            matrix = new ArrayList<List<Integer>>();
            for (int u = 0; u < n + 1; ++u) {
                row_final = new ArrayList<Integer>();
                row_temporary = new ArrayList<Integer>();
                row_final.clear();
                // inicjalizacja - wartosc elementu 2 w wierszu 4
                // elementow zerowych, pierwszych, ostatnich i przedostatnich
                // nie zapamietujemy
                row_final.add( 6 );

                //
                //// petla generujaca odpowiedni wiersz
                //

                // i - numer budowanego wiersza
                for (int i = 5; i < u+1; ++i) {
                    // wektor roboczy
                    row_temporary.clear();

                    // tworzony jest pierwszy element wektora roboczego
                    row_temporary.add(i-1 + row_final.get(0));

                    // j - liczba elementow wektora roboczego
                    // korzystamy z faktu, ze wystarczy zapamietac
                    // ~polowe elementow (wiersze sa symetryczne)
                    int j = Math.ceil((float) i/2) - 2;

                    // r - numer tworzonego elementu wiersza roboczego
                    for (int r = 1; r < j; ++r) {
                        // korzystamy z zaleznosci rekurencyjnej tworzenia
                        // elementow
                        row_temporary.add(row_final.get(r-1) + row_final.get(r));
                    }

                    // w przypadku parzystych wierszy dodajemy dwukrotnosc
                    // ostatniego elementu poprzedniego wiersza
                    // wynika to z faktu, ze wiersze sa symetryczne
                    if (i % 2 == 0) {
                        row_temporary.add(2 * row_final.get(row_final.size() - 1));
                    }

                    // zastepujemy wiersz wejsciowy
                    // wierszem wyjsciowym (roboczym)
                    row_final.clear();
                    row_final = row_temporary;
                    // usuwamy zbedna kopie wiersza roboczego z pamieci
                    row_temporary.clear();
                }
                matrix.add(row_final);
            }
        }
    }
}

以及测试类的代码:

package kp_lista04_java;

public class TrojkatPascalaTest {
    public static void main( String[] arg ) {
        try {

            if (arg.length == 0) {
                throw new TrojkatPascalaException("No arguments were given");
            }

            else {
                TrojkatPascala pascal_triangle;
                // n - zadany numer wiersza      
                int n = Integer.parseInt(arg[0]);
                System.out.println("Row range from " + 0 + " to " + n);
                pascal_triangle = new TrojkatPascala(n);
                // p - zadany numer elementu w zadanym wierszu
                for (int i = 1; i < arg.length; i = i + 2) {
                    try {
                        System.out.println("-----");
                        try {
                            Integer.parseInt(arg[i]);
                        }
                        catch (NumberFormatException e){
                            throw new TrojkatPascalaException("Row " + arg[i] + ": index is not an integer");
                        }
                        int r = Integer.parseInt(arg[i]);
                        if (r < 0 || r > n) {
                            throw new TrojkatPascalaException("Row " + r + ": index out of range");
                        }
                        System.out.println("Row " + r + ":");
                        System.out.println("    Element range from 0 to " + r);
                        try {
                            Integer.parseInt(arg[i+1]);
                        }
                        catch (NumberFormatException e){
                            throw new TrojkatPascalaException("    Element " + arg[i+1] + ": index is not an integer");
                        }
                        int p = Integer.parseInt(arg[i+1]);
                        int elemele = pascal_triangle.wspolczynnik(r, p);
                        System.out.println("    Element " + p + ": " + elemele);
                    }
                    catch (TrojkatPascalaException w) {
                        System.out.println(w.getMessage());
                    }
                }
            }
        }
        catch (TrojkatPascalaException w) {
            System.out.println(w.getMessage());
        }
    }
}

提前致谢。

【问题讨论】:

  • 粘贴准确完整的错误信息,并告诉我们它在发布的代码中引用了哪一行。
  • 您发布的代码中的第 17 行和第 56 行在哪里?

标签: java identifier


【解决方案1】:

方法和构造函数中的Exception 周围不应有括号。

所以改变:

public int wspolczynnik (int param_r, int param_p) throws (TrojkatPascalaException) {

到:

public int wspolczynnik (int param_r, int param_p) throws TrojkatPascalaException {

构造函数也一样。

【讨论】:

  • 谢谢。当一个疲倦的人(也是一个初学者)将 C++ 翻译成 Java 时,就会发生这种情况。
【解决方案2】:

改变

public int wspolczynnik (int param_r, int param_p) throws (TrojkatPascalaException)

TrojkatPascala (int n_param) throws (TrojkatPascalaException)

分别

public int wspolczynnik (int param_r, int param_p) throws TrojkatPascalaException
TrojkatPascala (int n_param) throws TrojkatPascalaException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2023-03-25
    相关资源
    最近更新 更多