java - 预期 <identifier> (Java)

标签 java identifier

我是 Java 新手。我正在编写代码来创建帕斯卡三角形的对象和允许我获取牛顿二项式因子值的方法。我收到了神秘的“预期”错误,但它并没有告诉我太多信息。我已经通过Google和SO进行了搜索,但没有结果。对于使用我的母语的评论和类(class)名称,我感到很抱歉,但这正是导师想要的。我有 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());
        }
    }
}

提前致谢。

最佳答案

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

所以改变:

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

至:

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

构造函数也是如此。

关于java - 预期 <identifier> (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22894895/

相关文章:

postgresql - 标签中的最大字符数(表名、列等)

c - 注释/标识符是否会影响代码性能/可操作性?

用于识别文章主题的 python 库

java - 实现类的两种方法

java - 如何使用 REST 服务处理客户端-服务器应用程序中的错误?

Java Runtime.getRuntime().exec 无法在命令中使用双引号

hash - 如何处理哈希冲突?

naming-conventions - 更好的标识符名称?

java - Android 将图像添加到首选项?

java - 读取.txt文件中的整数并存储在arraylist中