我编写了这个java-fx程序,它在没有递归实现的情况下工作得很好。我编写了操作lambda上的按钮,以确保程序在转换为递归之前正常工作。在过去的几个小时里,我一直在尝试找出两个必需的递归,以及如何使用按钮调用它们。onAction lambda表达式,但需要向正确的方向推动。这是我的。
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);
}}
我想做的是让按钮操作调用递归方法,但我对如何用对递归的调用替换当前操作感到困惑。
在熟睡之后,下面是我对这两个递归方法的想法。我知道昨晚我有两个不同的方法,递归应该自己调用。以下是我迄今为止所做的改变。
而不是两个单独的方法:
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;
}
我至少走对了吗?被要求使用这两个递归方法(original和它的助手)让我很反感。
从你的代码中不清楚什么是高。我假设它应该是要检查的字符数组中最后一个字符的索引(可能是独占的)。
因此,您的递归步骤实际上需要减少而不是增加它,您只需直接检查chars[high-1]。您还需要一个终止步骤,即当没有更多字符可查看时。
所以我会把它实现为
private int count(char[] chars, int high) {
// if high==0 we are looking at zero characters, so there are no upper-case characters:
if (high == 0) {
return 0 ;
}
if (Character.isUpperCase(chars[high-1])) {
// if the last character we look at is upper-case, then the total
// for this set of characters is one more than the total for the
// set of characters omitting the last one:
return 1 + count(chars, high-1);
} else {
// otherwise (the last character is not upper-case), the total
// for this set of characters is the same as the total for the
// set of characters omitting the last one:
return count(chars, high-1);
}
}
为方便起见,您还可以实施
public int count(String text) {
return count(text.getChars(), text.length());
}
然后您的事件处理程序只需调用
label1.setText("Number of upper case: "+count(textField.getText()));
(你究竟为什么把一切都变成静态的,这完全是另一回事。)
我想按以下顺序打印子字符串:-“”,“D”,“C”,“CD”,“B”,“BD”,“BC”,“BCD”,“A”,“AD”,“AC”,“ACD”,“AB”,“ABD”,“ABC”,“ABCD” 在这里,最后4个阵型的“a”不见了
12.3. Display,一个递归的值打印器 接下来,让我们看看如何改善聚合数据类型的显示。我们并不想完全克隆一个fmt.Sprint函数,我们只是构建一个用于调试用的Display函数:给定任意一个复杂类型 x,打印这个值对应的完整结构,同时标记每个元素的发现路径。让我们从一个例子开始。 e, _ := eval.Parse("sqrt(A / pi)") Display("e", e) 在
我正在编写一段代码,用于递归地只打印字符串的字典序较大的子字符串。 代码运行良好。我在这里所做的是递归生成所有子字符串,并同时将它们插入ArrayList。后来对该列表进行排序,比较字符串,瞧,就这样完成了。 现在困扰我的是这个程序的复杂性。在这里,我生成所有的子字符串,然后从中进行选择。对于递归,我觉得这是一个自动化的过程,所有的子字符串都必须至少创建或访问一次。所以,在这一点上,我想问一下这是
我试图使用递归打印链表中每个节点中的数据,但是我得到了越界错误,所以我认为递归函数有问题。 这是头文件: 基本上,我从公共函数调用私有助手函数。下面是两个函数的代码: 我认为问题出在if块中,因为如果没有下一个节点,我需要停止,但在返回之前还需要打印当前节点中的数据,但因为我已经调用了
我试图以相反的顺序打印一个链表,但实际上没有使用递归进行反转,但我的输出结果非常奇怪。看起来我的代码基本上选择了第一个节点,并在打印完链表的其余部分(按原始顺序)后将其打印出来。我所写的代码(据我所知)是正确的,并且与internet上解决此问题的代码相匹配。 这是我的代码: 以下是节点类: 这是我给出的输入,然后是输出: 这里发生的另一个奇怪的事情是,如果我改变递归的条件,假设我这样做: 然后是
我在Hackerrank上解决反向挑战的指纹 方法接受一个参数-链表的头部。您不应该从stdin/console中读取任何输入。头部可能是空的,所以不应该打印任何东西。按照与stdout/console相反的顺序打印链表的元素(使用printf或cout),每行一个。 NB:节点的结构为struct Node{int data;struct Node*next;}