我是 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/