2013-10-22 3 views
0

배열을 사용하지 않고 두 개의 사용자 정의 문자열을 비교하여 두 문자열간에 공유되는 문자 수를 출력하고 싶습니다. 그런 다음 각 문자를 출력해야합니다. 나는 스캐너를 사용하여 사용자 입력 부분을 이해하지만 나중에 나는 우둔합니다.두 문자열 사이에 같은 문자 계산 및 출력

예를 들어, 문자열 2가 반환로와 "무슨 일이 있었"문자열 1로 "방해"공유 자 ​​= 5

공유 문자 >> "H", "A", "P의

수 ","p ","e ","e "

내가 지금까지 가지고있는 것입니다. 그것은 각각의 문자를 별도의 줄에 인쇄합니다. 위와 같이 한 줄에 모두 나열 할 수있는 배열이없는 방법이 있습니까? :

public class CountMatches { 

    public static void main(String[] args) 
    { 
    //Declare both Strings. 
    String word1; 
    String word2; 
    int count = 0; 


    //Call for User Input. 
    Scanner inputDevice = new Scanner(System.in); 
    System.out.print("Input String 1 >> "); 
    word1 = inputDevice.next(); 
    System.out.print("Input String 2 >> "); 
    word2 = inputDevice.next(); 
    inputDevice.close(); 

    //Determine lengths and set label accordingly. 
    String BigWord; 
    String SmallWord; 

    if (word1.length() > word2.length()) 
    { 
     BigWord = word1; 
     SmallWord = word2; 
    } 
    else 
    { 
     BigWord = word2; 
     SmallWord = word1; 
    } 

    //Count and Display the like characters. 
    for (int i = 0; i < SmallWord.length(); i++) 
    { 
     if (BigWord.contains(String.valueOf(SmallWord.charAt(i)))) 
     { 
      System.out.println("both words contain the letter " + SmallWord.charAt(i)); 
      count++; 
     } 
    } 

    //Display the count of like characters.  
    System.out.print("Number of like characters >> " + count); 
    } 

    } 

답변

1

의 당신이 word1word2 있다고 가정 해 봅시다 :

String biggerWord; 
String smallerWord; 
if (word1.length() > word2.length()) { 
    biggerWord = word1; 
    smallerWord = word2; 
} else { 
    biggerWord = word2; 
    smallerWord = word1; 
}   
for (int i = 0; i < smallerWord.length(); i++) { 
    if (biggerWord.contains(String.valueOf(smallerWord.charAt(i)))) { 
    counter++; 
    } 
} 

이 더 큰되는 단어 파악. 그런 다음 길이가 smallerWord 인 경우 한 번에 한 문자 씩 반복하여 biggerWord에 해당 문자가 포함되어 있는지 확인하십시오. 그렇다면 카운터를 증가시킵니다. counter은 루프 끝까지 공통 문자 수를 가져야합니다.

이것은 자유롭게 작성되었으므로 구문 및 부 논리 오류에 유의하십시오. 아니면 너의 임무를 잘못 이해 했어. 그것은 꽤 가까이 있어야합니다.

+0

작은 길이를 반복 할 때 word2가 contains 절의 짧은 단어라고 가정하기 때문에 이것은 실제로 잘못된 것입니다. word1 = "bbb"및 word2 = "aaab"로 설정하면 일반 문자가 없다고 표시됩니다. – mau

+0

당신은 수정해야하지만 약간 다른 이유로 수정해야합니다. "잘못"이라고하는 것은 (많은 입력에 대해 효과가 있었기 때문에) 부정확하고 약간 거친 하하였습니다. 수정했습니다. 그것을 확인하십시오. 의견을 감사하십시오. 이런 물건으로 나는 멍청한 실수를 범하기 쉽다. – Vidya

+0

그래, 잘못 말하면 좋지 않았다. 작은 논리 오류가 더 좋습니다 :). 이 지금 작동합니다. – mau

0

정말 좋은 방법은 문자열을 사전 순으로 정렬하는 것입니다.

단어를 문자 배열로 바꾸고 사전 순으로 정렬 한 다음 다시 문자열로 만듭니다.

다음 단계는 처음부터 반복하고 모든 공통 문자를 인쇄하는 것입니다. 정렬 된 이후에 더 쉬울 것입니다.

int index1 = 0; 
int index2 = 0; 
while((index1 < sortedWord1.length()) && (index2 < sortedWord2.length()) { 
    if(sortedWord1.charAt(index1) == sortedWord2.charAt(index2)) { 
    System.out.print(sortedWord1.charAt(index1) + " "); 
    index1++; index2++; 
    } 
    else if(sortedWord1.charAt(index1)> sortedWord2.charAt(index2)) { 
    index2++; 
    } 
    else { 
    index1++; 
    } 
} 

구문 오류는 검사하지 않았지만 좋았습니다.

+0

슬픈 듯이 이것을 위해 배열을 사용할 수 없습니다. – user2908506

관련 문제