我正在尝试了解以下代码

时间:2020-02-02 16:22:46

标签: java string loops conditional-statements

当我在

上手动执行迭代时,我得到了一个不同的值

“ welcometojava”

当i = 5时的值

我正在跟踪变量的值

当我= 5时;

substring =MET
smallest="com"
largest="ome"

在这一点上,我得到的值不是同时验证两个if条件。
我需要每次迭代中所有3个变量的值的帮助,以便我可以知道我要去哪里 错了。谢谢

public class Solution {

public static String getSmallestAndLargest(String s, int k) {
    String smallest = "";
    String largest = "";
    smallest = largest = s.substring(0, k);
    for (int i=1; i<s.length()-k+1; i++) {
        String substr = s.substring(i, i+k);
        if (smallest.compareTo(substr) > 0)
            smallest = substr;
        if (largest.compareTo(substr) < 0)
            largest = substr;
    }
    return smallest + "\n" + largest;
}

1 个答案:

答案 0 :(得分:1)

如果您不使用调试器,则可以通过打印它们来跟踪值,例如我已将System.out.println("i=" + i + ", substring=" + substr + ", smallest=" + smallest + ", largest=" + largest);添加到您的代码中,如下所示,并且还在其下方显示了输出,以帮助您了解代码的行为方式:

public class Solution {
    public static void main(String[] args) {
        getSmallestAndLargest("welcometojava", 3);
    }

    public static String getSmallestAndLargest(String s, int k) {
        String smallest = "";
        String largest = "";
        smallest = largest = s.substring(0, k);
        for (int i = 1; i < s.length() - k + 1; i++) {
            String substr = s.substring(i, i + k);
            if (smallest.compareTo(substr) > 0)
                smallest = substr;
            if (largest.compareTo(substr) < 0)
                largest = substr;
            System.out.println("i=" + i + ", substring=" + substr + ", smallest=" + smallest + ", largest=" + largest);
        }
        return smallest + "\n" + largest;
    }
}

输出:

i=1, substring=elc, smallest=elc, largest=wel
i=2, substring=lco, smallest=elc, largest=wel
i=3, substring=com, smallest=com, largest=wel
i=4, substring=ome, smallest=com, largest=wel
i=5, substring=met, smallest=com, largest=wel
i=6, substring=eto, smallest=com, largest=wel
i=7, substring=toj, smallest=com, largest=wel
i=8, substring=oja, smallest=com, largest=wel
i=9, substring=jav, smallest=com, largest=wel
i=10, substring=ava, smallest=ava, largest=wel

以类似的方式,您可以添加更多打印语句,例如打印smallest.compareTo(substr) > 0的值,依此类推,以使您的代码更深入。但是,我强烈建议您使用调试器来这样做。