首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><identifier>预期(Java)

<identifier>预期(Java)
EN

Stack Overflow用户
提问于 2014-04-06 13:48:05
回答 2查看 197关注 0票数 0

我对Java很陌生。我正在编写代码,它将创建Pascal三角的一个对象,以及一种方法,使我能够得到牛顿的二项式因子值。我得到了神秘的“期望”错误,但并没有告诉我太多。我搜索过谷歌等等,但都没有用。我很抱歉,我的母语的评论和类名,但这是导师想要的。我的代码在C++中工作,如果有任何帮助的话。

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

下面是这个类的代码:

代码语言:javascript
复制
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);
            }
        }
    }
}

以及测试类的代码:

代码语言:javascript
复制
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());
        }
    }
}

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-06 13:51:24

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

因此,改变:

代码语言:javascript
复制
public int wspolczynnik (int param_r, int param_p) throws (TrojkatPascalaException) {

至:

代码语言:javascript
复制
public int wspolczynnik (int param_r, int param_p) throws TrojkatPascalaException {

构造函数也是如此。

票数 2
EN

Stack Overflow用户

发布于 2014-04-06 13:57:18

变化

代码语言:javascript
复制
public int wspolczynnik (int param_r, int param_p) throws (TrojkatPascalaException)

代码语言:javascript
复制
TrojkatPascala (int n_param) throws (TrojkatPascalaException)

分别到

代码语言:javascript
复制
public int wspolczynnik (int param_r, int param_p) throws TrojkatPascalaException
TrojkatPascala (int n_param) throws TrojkatPascalaException
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22894895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档