【问题标题】:Why doesn't my code listen?为什么我的代码不听?
【发布时间】:2016-01-25 03:33:11
【问题描述】:
import java.util.Scanner;

public class ReverseCompliment 
{
   public static void main(String[] args)
   {
      Scanner in = new Scanner(System.in);
      String seqFirst = "0";
      String seqSecond = "0";
      String seqReverseCompliment = "";
      boolean isOrIsNot = true;

      System.out.print("Enter the first sequence: ");
      seqFirst = in.next();
      System.out.print("Enter the second sequence: ");
      seqSecond = in.next();

      for ( int i = 0; i < seqFirst.length(); i++)
      {
         if ( seqFirst.charAt(i) == 'A')
         {
            seqReverseCompliment = "T" + seqReverseCompliment;
         }
         else if ( seqFirst.charAt(i) == 'T')
         {
            seqReverseCompliment = "A" + seqReverseCompliment;
         }
         else if ( seqFirst.charAt(i) == 'C')
         {
            seqReverseCompliment = "G" + seqReverseCompliment;
         }
         else if ( seqFirst.charAt(i) == 'G')
         {
            seqReverseCompliment = "C" + seqReverseCompliment;
         }
         else
         {
            System.out.println("incorrect input");
         }
      }
       for ( int i = 0; i < seqFirst.length(); i++)
       {
          if ( seqSecond.charAt(i) != seqReverseCompliment.charAt(i) )
          {
             isOrIsNot = false;
          }
          else if ( seqSecond.charAt(i) == seqReverseCompliment.charAt(i) )
          {
             isOrIsNot = true;
          }
       }
       if ( isOrIsNot = true )
       {
          System.out.println("These are reverse compliments");
       }
       else if (
       {
          System.out.println("These are not reverse compliments");
       }
   }
}

本质上,我需要用户输入两个 DNA 序列,然后程序需要比较它们并确定这两个序列是否相互反向互补。我不是在找人来为我完成这项任务,我只是不知道为什么它不能正常工作。 当我测试它时,它总是说这两者是反向恭维。

screenshot of assignment

【问题讨论】:

  • 您必须提供更多详细信息。 “无法正常工作”是不够的。
  • “当我测试它时,它总是说这两个是反向赞美”因为无论输入如何,程序总是说这两个是反向赞美
  • 您的 isOrIsNot 变量仅反映了最后一次比较。一旦发现第一个不匹配项,您需要从循环中break
  • 您需要在第一次不匹配时打破循环,并且您的布尔比较需要== 而不是=
  • 我改了,同样的问题。我输入“AAA”然后“GGG”,它识别为反向赞美,这是不正确的

标签: java dna-sequence


【解决方案1】:

您可以使用String.equalsseqSecondseqReverseCompliment 进行比较:

import java.util.Scanner;

public class ReverseCompliment 
{
   public static void main(String[] args)
   {
      Scanner in = new Scanner(System.in);
      String seqFirst = "0";
      String seqSecond = "0";
      String seqReverseCompliment = "";

      System.out.print("Enter the first sequence: ");
      seqFirst = in.next();
      System.out.print("Enter the second sequence: ");
      seqSecond = in.next();

      for ( int i = 0; i < seqFirst.length(); i++)
      {
         if ( seqFirst.charAt(i) == 'A')
         {
            seqReverseCompliment = "T" + seqReverseCompliment;
         }
         else if ( seqFirst.charAt(i) == 'T')
         {
            seqReverseCompliment = "A" + seqReverseCompliment;
         }
         else if ( seqFirst.charAt(i) == 'C')
         {
            seqReverseCompliment = "G" + seqReverseCompliment;
         }
         else if ( seqFirst.charAt(i) == 'G')
         {
            seqReverseCompliment = "C" + seqReverseCompliment;
         }
         else
         {
            System.out.println("incorrect input");
         }
      }
       if ( seqSecond.equals(seqReverseCompliment) )
       {
          System.out.println("These are reverse compliments");
       }
       else if (
       {
          System.out.println("These are not reverse compliments");
       }
   }
}

【讨论】:

  • 有什么办法可以避免多余的变量(seqReverseCompliment)。这就是我想做的,但我的大脑并没有弄清楚。就像我需要将 seqFirst 的第一个字符与 seqSecond 的最后一个字符进行比较,但由于某种原因我不知道如何编码。我认为它会更干净
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2014-01-23
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多