我试图完全理解该方法的工作原理,请参阅下面的代码:
public static void main(String[] args) {
System.out.println(countspaces("a number of spaces "));
}
public static int countspaces(String s) {
if (s.length() == 0)
return 0;
else
return (s.charAt(0) == ' ' ? 1 : 0) + countspaces(s.substring(1));
}
Run Code Online (Sandbox Code Playgroud)
我使用BlueJ调试了该方法.这条线:
return (s.charAt(0) == ' ' ? 1 : 0) + countspaces(s.substring(1));
Run Code Online (Sandbox Code Playgroud)
首先检查索引零处的字符是否为空格,然后再次调用自身(这使得它递归)从索引1开始的s的子字符串作为参数有效地将参数从"多个空格"更改为"空格的数量"直到参数的长度()达到0为止.我没有得到的是为什么它不返回01000000100100000010(最后的0是空字符串s终止循环)但是4?我无法看到代码中的哪个位置总结了1的返回值
(s.charAt(0) == ' ' ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)
并忽略了0.请告诉我我的推理缺少什么.
非常感谢
格热戈日(格雷格)
这是我的Fraction类代码,有几种方法,我的要求是将分子作为分母int:
/**
* @author GKsiazek
* Reference: https://github.com/kiprobinson/BigFraction/blob/master/com/github/kiprobinson/util/BigFraction.java
* Reference: https://github.com/kiprobinson/BigFraction/blob/master/com/github/kiprobinson/junit/BigFractionTest.java
*/
package Fraction;
import java.math.*;
public class Fraction {
private int numerator;
private int denominator;
/**
* Constructor with two int parameters
* @param num is numerator
* @param den is denominator
*/
public Fraction()
{}
public Fraction(int num, int den) {
if (den==0){//denominator cannot be zero
System.out.println("Denominator cannot be zero");
return;
}
this.numerator = num;
this.denominator = den;
this.normalize();
}
/**
* Constructor with one int …Run Code Online (Sandbox Code Playgroud)