【问题标题】:Java boolean conditions in loop循环中的 Java 布尔条件
【发布时间】:2016-01-14 16:15:45
【问题描述】:

我正在尝试计算并返回两个长度相等的 DNA 序列不同的地方。例如,给定字符串“ATGT”和“GTGA”,结果应该是数组 { true, false, false, true }。我收到一个 False/true 错误,无法解析为一个变量,这是我到目前为止得到的结果

/**
   * Calculates and returns where two DNA sequences of equal lengths differ. For
   * example, given strings "ATGT" and "GTGA", the result should be array
   * { true, false, false, true }.
   * 
   * @param dna1 a String representing a DNA sequence of arbitrary length (equal
   *          to dna2's length), containing only the characters A, C, G and T
   * @param dna2 a String representing a DNA sequence of arbitrary length (equal
   *          to dna1's length), containing only the characters A, C, G and T
   * @return an array of boolean values, of length equivalent to both
   *         parameters' lengths, containing true in each subscript where the
   *         parameter strings differ, and false where they do not differ
   */
  public static boolean[] mutationPoints(String dna1, String dna2) {
      boolean [] mutPoint =  new boolean [dna1.length()]; 
      for( int i = 0; i < i; i++) {
          if( dna1 != dna2) {
              mutPoint[i] = False; 
          }
          else if (dna1 == dna2) {
              mutPoint[i] = True; 
          }
      }

【问题讨论】:

  • 使用小写 true & false
  • 你想用for( int i = 0; i &lt; i; i++) {达到什么目的@这总是0
  • truefalse 都小写,但下一个谜团将是循环条件`i
  • 使用 equals 比较两个字符串,你的循环也神秘地构建了。我们从不进入。

标签: java arrays loops boolean


【解决方案1】:

您需要迭代 mutPoint.length 次(而不是循环中的 i 次)。您想比较i 索引处的字符(而不是Strings)。你需要返回数组。类似的,

boolean[] mutPoint = new boolean[dna1.length()];
for (int i = 0; i < mutPoint.length; i++) {
    mutPoint[i] = dna1.charAt(i) != dna2.charAt(i);
}
return mutPoint;

喜欢

char[] dna1arr = dna1.toCharArray();
char[] dna2arr = dna2.toCharArray();
boolean[] mutPoint = new boolean[dna1arr.length];
for (int i = 0; i < mutPoint.length; i++) {
    mutPoint[i] = dna1arr[i] != dna2arr[i];
}
return mutPoint;

【讨论】:

    【解决方案2】:

    尝试以下算法:

    String dna1 = "ATGT";
            String dna2 = "GTGA";
    
            if(dna1.length() != dna2.length()) return;
    
            boolean [] mutPoint =  new boolean [dna1.length()];
            for( int i = 0; i < dna1.length(); i++) {
                if( dna1.charAt(i) == dna2.charAt(i)) {
                    mutPoint[i] = false;
                }
                else {
                    mutPoint[i] = true;
                }
            }
    
            System.out.println(Arrays.toString(mutPoint));
    

    打印:[true, false, false, true]

    注意事项:

    1. 循环应该运行 dna 的长度。
    2. 您需要检查两个 dna 的长度是否相等。
    3. 您需要比较字符串中字符的相等性。

    【讨论】:

    • 谢谢!我将循环更改为mutPoint.length 的运行长度我遇到了条件语句中的逻辑问题,我应该不使用i &lt; mutPoint.length,因为我试图让 dna1 等于另一个 dna2。
    【解决方案3】:

    这是一个简短的答案:

    public static boolean[] mutationPoints(String dna1, String dna2) {
              boolean [] mutPoint =  new boolean [dna1.length()]; 
              for (int i = 0 ; i < mutPoint.length ; i++){
                  mutPoint[i] = dna1.charAt(i) != dna2.charAt(i);
              }
        }
    

    【讨论】:

      【解决方案4】:

      我假设只有当它们的长度相等时才需要比较 dna 序列。

      public static boolean[] mutationPoints(String dna1, String dna2) {
              if(dna1.length() == dna2.length()){
                boolean [] mutPoint =  new boolean [dna1.length()]; 
                for( int i = 0; i < dna1.length(); i++) {
                    if( dna1.charAt(i)== dna2.charAt(i)) {
                        mutPoint[i] = true; 
                    }
      
                   else  {
                        mutPoint[i] = false; 
                    }
                }
      
                    return mutPoint;  }
      
              else{
                  return null;
              }
          }
      
          public static void main(String args[]) {
              boolean abc[]=mutationPoints("AWQA","AQQA");
      
          System.out.println(Arrays.toString(abc));
      
            }
      

      输出:

      [真、假、真、真]

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 1970-01-01
        • 2013-05-15
        • 2018-01-24
        • 1970-01-01
        • 2016-09-19
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多