Xây dựng Manipulate và ArrayList với JLink
Tôi tự hỏi liệu có thể đặt mã này bên trong Thao tác không. Tôi đã thử như thế này và nhận được kết quả trong hộp thông báo:
Sau đó, khi tôi chọn một từ khác nhau từ PopMenu, tôi nhận được điều này:
Nghĩ rằng vấn đề là ...Print[...]hướng dẫn nên đã cố gắng tạo một danh sách mảng như thế này nhưng hoàn toàn không thành công, không có kết quả ...
Needs["JLink`"]
Scanner[archivo_String, palabra_String] :=
JavaBlock@
Module[{entrada, linea, numlinea, contiene, ruta, lista, renglon,
nop}, numlinea = 1; linea = ""; contiene = False;
InstallJava[];
ruta = JavaNew["java.io.File", archivo];
entrada = JavaNew["java.util.Scanner", ruta];
lista = JavaNew["java.util.ArrayList"];
(*Print["File: " <> ruta@getName[]];
Print["Word:" <> palabra];*)
While[entrada@hasNext[], linea = entrada@nextLine[];
If[JavaNew["java.lang.String", linea]@
contains[MakeJavaObject@palabra],
renglon =
JavaNew["java.lang.String",
"Line " <> ToString[numlinea ] <> ": " <> ToString[linea]];
contiene = True;
lista@add[renglon];
JavaObjectToExpression[lista]];
numlinea++];
If[! contiene,
nop = JavaNew["java.lang.String",
ToString[palabra] <> " no se ha encontrado"];
lista@add[nop];
JavaObjectToExpression[lista]]]
Không biết chính xác cách thực hiện, tôi đánh giá cao sự giúp đỡ của bạn.
Trả lời
Điều này không liên quan gì đến Manipulatehoặc Print. Nhìn vào kết quả của Scanner[file, "issue"]và bạn sẽ thấy rằng nó là Null.
Nhìn vào mã của bạn, Scannerhàm kết thúc bằng một câu lệnh như thế này
If[! contiene, <do some stuff>]
Bạn không có đối số thứ ba cho If. Và đối với bất kỳ từ nào chứa trong tập tin, contienelà Truevà do đó bạn đang đánh giáIf[False, <code that is never reached]
Thử cái này:
Scanner[archivo_String, palabra_String] := JavaBlock[
Module[
{entrada, linea, numlinea, contiene, ruta, lista, renglon, nop},
numlinea = 1;
linea = "";
contiene = False;
InstallJava[];
ruta = JavaNew["java.io.File", archivo];
entrada = JavaNew["java.util.Scanner", ruta];
lista = JavaNew @ "java.util.ArrayList";
While[entrada @ hasNext[],
linea = MakeJavaObject @ entrada @ nextLine[];
If[linea @ contains @ palabra,
renglon = MakeJavaObject @ StringJoin["Line ", ToString @ numlinea, ": ", JavaObjectToExpression @ linea];
contiene = True;
lista @ add @ renglon;
JavaObjectToExpression @ lista
];
++numlinea
];
If[!contiene,
lista @ add @ MakeJavaObject @ StringJoin[palabra, " no se ha encontrado"]
];
Column @ JavaObjectToExpression @ lista
]
]