2016-11-28 28 views
-2

初学者在这里 -给出两个字符串的奇数字符

我需要在一组两个字符串中找到奇数字符。一切都在编译,但是当它打印出奇数字符时,它会打印出较长字符串的字符。有谁知道我该如何修复它?

感谢

public class odd 
{ 

    public static void main(String[] args) 
    { 
    String str1; 
    String str2; 

    Scanner keyboard = new Scanner(System.in); 

    System.out.println("Enter 2 words:"); 
    str1 = keyboard.nextLine(); 
    str2 = keyboard.nextLine(); 


    int n1 = str1.length(); 
    int n2 = str2.length(); 

    int x1 = 0, x2 = 0; 

    if (Math.abs(n1-n2)==1) 
    { 
    if (n1 > n2) 
    { 
     x1 = n1; 
     x2 = n2; 
    } 

    if(n1 < n2) 
    { 
    x1 = n2; 
    x2 = n1; 

    String temp = str1; 

    str1 = str2; 
    str2 = str1; 
    } 
    } 
    else 
    { 
    System.out.print("Invalid input."); 
    } 



for (int i=0; i < x1; i++) 
{ 
    for (int j = 0; j < x2; j++) 
    { 
    if(str1[i]==str2[j]) 
    { 
     System.out.println("Extra letter is: " + str1[i]); 
     break; 
    } 
    } 
    } 
} 
} 
+0

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – David

回答

0
if(str1[i]==str2[j]) 
{ 
    System.out.println("Extra letter is: " + str1[i]); 
    break; 
} 

你检查是否匹配字符,然后打印,如果是这样,当你陈述的意图是相反的:检查是否有差别,然后打印如果是这样的。将您的==更改为!=并且您应该获得所需的结果。

为了清楚起见,==是等于到操作者,和!=是不等于运算符。

+0

我这样做,它仍然打印出多个字符。字符串数组有问题吗? – jjuutz

+0

您的break语句仅从内部循环中断开。如果您想在打印后退出两个循环,则需要标签。更好的做法是将内部循环放入一个单独的函数中,但在您的示例中: for(int i = 0; i Zach

+0

对不起: 'outerloop: 的for(int i = 0; I Zach

0

对于你的程序工作的第一串减去第二个字符串必须等于1: Math.abs(N1-N2)== 1个 修复这段代码,提示:需要它?

+0

是的,因为这两个字符串应该只是一个字符,因为我应该找到这个奇怪的字符。我应该将str1 [i]更改为str1.charAt(i)吗? – jjuutz

+0

是的,你正在寻找一个charAt。 –

0

@jjuutz使用下面的方法来获取两个字符串之间的差异。

public static String difference(String str1, String str2) { 
if (str1 == null) { 
    return str2; 
} 
if (str2 == null) { 
    return str1; 
} 
int at = indexOfDifference(str1, str2); 
if (at == -1) { 
    return EMPTY; 
} 
return str2.substring(at); 
} 


public static int indexOfDifference(String str1, String str2) { 
if (str1 == str2) { 
    return -1; 
} 
if (str1 == null || str2 == null) { 
    return 0; 
} 
int i; 
for (i = 0; i < str1.length() && i < str2.length(); ++i) { 
    if (str1.charAt(i) != str2.charAt(i)) { 
     break; 
    } 
} 
if (i < str2.length() || i < str1.length()) { 
    return i; 
} 
return -1; 
}