2016-02-24 58 views
0

对于Java练习,我正在编写一个程序,用户输入两个字符串。程序然后检查两个字符串是否共享任何相似的字符并将它们输出到屏幕上。显示两个字符串之间共享的字符

例如,Terrarium和Terraform是它应该打印的两个字符串。但是,当我运行我的程序时,它总是只输出第一个字符串中的所有字符。 (在这种情况下,请选择)

我怀疑我基于对循环的有限理解而创建了逻辑错误。但是当我寻找答案时,人们似乎总是对我自己使用类似的方法。

这里是您观看代码:

import java.util.Scanner; 

    public class CountMatches 
    { 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println(" Please enter a String >> "); 
     String stringA = keyboard.nextLine(); 
     System.out.println(" Please enter another String >> "); 
     String stringB = keyboard.nextLine(); 

     for(int counter = 0; counter < stringA.length(); counter++) 
     { 
      char compareA = stringA.charAt(counter); 
      char compareB = stringB.charAt(counter); 
      //System.out.println(compareA); 
      //System.out.println(compareB); 
      //System.out.println(""); 

      if(compareA != compareB) 
      { 
       System.out.println(""); 
      } 
      else if(compareA == compareB); 
      { 
       System.out.println(compareA); 
       System.out.println(""); 
      } 
     } 
    } 
    } 
+1

您是否试图通过调试器逐句通过算法?这是查找逻辑错误的最佳方式。 – nolexa

+0

如果我正确理解你的意图,它不应该打印出“t r r r r r r”,它应该打印出“t r r r r r m”,因为它们最后都有一个“m”。 –

回答

1
else if(compareA == compareB); 

摆脱对这一行的分号,它应该工作。我也会摆脱第一个如果陈述只是保持第二个。

+0

谢谢不知道为什么我把分号放在那里.....我曾经尝试过多种代码组合,并且越来越累,所以它可能是一个意外。 – dpolaristar

0

这个代码有两个问题。

首先,

for(int counter = 0; counter < stringA.length(); counter++) 

如果两个字符串的长度不同,你可以得到通过摘另一个字符串的结尾异常。所以,这样做:

int len = stringA.length(); 
if (len > stringB.lengh()) len = stringB.length(); 

接下来,你编码失败的原因是因为你有一个;在你的其他地方结束。你的代码应该是:

 if(compareA != compareB) 
     { 
      System.out.println(""); 
     } 
     else // Don't need the == here 
     { 
      System.out.println(compareA); 
      System.out.println(""); 
     } 

祝你好运。

+0

谢谢你的len检查.....不知道我没有想到它。 – dpolaristar

相关问题