【问题标题】:I am trying to understand the following code below [duplicate]我试图理解下面的以下代码[重复]
【发布时间】:2020-05-18 13:15:54
【问题描述】:

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

“欢迎来到java”

当 i=5 时

我得到以下变量的值

当 i=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;
}

【问题讨论】:

  • 有什么问题?您的预期是什么?它与您得到的结果有何不同?
  • 您可以在每次迭代时只打印substrsmallestlargest 的值吗?
  • 我试图通过在纸上执行代码逻辑来理解这段代码
  • 您的程序按字典顺序将当前子字符串(substr)与最小和最大字符串进行比较,并检查当前子字符串是否小于现有最小字符串或大于现有最大字符串。您在此程序中还有哪些其他配置?如果“smallest ,则循环中的两个 IF 条件都会失败
  • 谢谢你的解决方案。

标签: java string loops conditional-statements


【解决方案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) &gt; 0 的值等以将您的代码跟踪到更深层次。不过,我强烈建议您使用调试器来执行此操作。

【讨论】:

  • @Arvind Kuman Avinash 谢谢
  • @Amit - 我希望该解决方案对您有用。不要忘记接受答案,以便将来的访问者也可以放心地使用该解决方案。检查meta.stackexchange.com/questions/5234/… 了解如何操作。如有任何疑问/问题,请随时发表评论。
猜你喜欢
  • 2015-03-10
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多