Ich schrieb dieses Java-Fx-Programm und es funktioniert perfekt ohne die rekursiven Implementierungen. Ich habe die Schaltfläche onAction Lambda geschrieben, um sicherzustellen, dass das Programm korrekt funktioniert, bevor es in die Rekursion konvertiert wird. Ich habe die letzten paar Stunden damit verbracht, die beiden erforderlichen Rekursiven herauszufinden und sie mit dem Lambda-Ausdruck button.onAction aufzurufen, aber ich brauche einen Schub in die richtige Richtung. Hier ist was ich habe.Verwenden rekursiven und rekursiven Helper, um Benutzer eingegeben Kapital Zeichen von TexField zu TextArea
static TextField textField = new TextField();
static String text = textField.getText();
static TextArea textArea = new TextArea();
static Button btSubmit = new Button ("Submit");
@Override
public void start(Stage primaryStage){
Label label1 = new Label("Enter letters and I will "
+ "count the capitals.\t"); //Create textfield label.
textArea.setEditable(false);
textArea.setMaxWidth(450);
textArea.setMaxHeight(100);
HBox hbox = new HBox(); //Create hbox.
hbox.setAlignment(Pos.BASELINE_CENTER); //Set hbox to center.
hbox.getChildren().addAll(label1, textArea, textField,
btSubmit); //Add children to hbox.
BorderPane pane = new BorderPane(); //Create pane.
pane.setTop(hbox); //Set hbox to top of pane.
pane.setCenter(textArea); //Set text area to center.
Scene scene = new Scene (pane, 450, 200); //Create scene.
primaryStage.setTitle("Count Capital Letters");
primaryStage.setScene(scene);
primaryStage.show();
btSubmit.setOnAction(e -> {
String text = textField.getText();
int upperCase = 0;
for (int i = 0; i < text.length(); i++){
if (Character.isUpperCase(text.charAt(i))) upperCase++;
}
String numCaps = String.valueOf(upperCase);
textArea.appendText("Number of capitals: " + numCaps);
});
}
public static int count(char[] chars) {
String text = textField.getText();
chars = text.toCharArray();
if (chars.length == 0);
return 0;
}
public static int count(char[] chars, int high) {
high = 0;
String text = textField.getText();
chars = text.toCharArray();
for (int i = 0; i < chars.length; i++){
if (Character.isUpperCase(chars[i])) {
high++;
}
}
return high;
}
public static void main(String[] args){
launch(args);
}}
Was ich versuche, die Button-Aktion Aufruf der rekursiven Methoden zu tun ist, aber ich bin verwirrt, wie meine aktuelle Aktion mit einem Aufruf an die recursives zu ersetzen.
Nachdem ich darauf geschlafen habe, hier ist, was ich für die beiden rekursiven Methoden entwickelt habe. Ich wusste, dass ich letzte Nacht zwei verschiedene Methoden hatte und dass sich ein Rekursiv selbst nennen sollte. Hier ist, was ich bisher geändert habe.
Anstelle der beiden separaten Methoden:
public static int count(char[] chars, int high) {
int count = 0;
if (high < chars.length) {
if (Character.isUpperCase(chars[high])) {
return 1 + count;
}
else {
return count(chars, high+1);
}
}
return 0;
}
Bin ich zumindest auf dem richtigen Weg? Die Notwendigkeit, die beiden rekursiven Methoden (Original und dessen Helfer) zu verwenden, bringt mich um.
Welche Methoden sind Ihrer Meinung nach "rekursiven", und warum? Die meisten Menschen würden eine Methode nur dann als "rekursiv" bezeichnen, wenn sie sich zumindest indirekt nennt. –
Ich habe sie möglicherweise falsch implementiert. Das Rekursive und sein Helfer, den ich benutzen soll, sind die beiden Zählmethoden. – Xiokraze
Keines dieser Anrufe selbst. Was meinst du eigentlich mit "rekursiv"? –