1

そのため、2 つの文字列を入力する必要があるこのタスクがあります。その後、一般的な文字を見つけて、それらを 1 回だけ書き出す必要があります。たとえば、string1 が「オノマトペ」で、string2 が「会話」の場合I should get back: o,n,a,t,e,i... 私の唯一の問題は、最後の部分です (「文字の書き方が 1 回しかわかりません」)

ここに私のコードがあります

import java.util.Scanner;
import java.util.Arrays;

public class Zadatak4 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        char niz[] = new char[100];
        char niz2[] = new char[100];

        System.out.print("Add the first string: ");
        niz = scan.nextLine().toCharArray();

        System.out.print("Add the second string: ");
        niz2 = scan.nextLine().toCharArray();

        for (int i = 0; i < niz.length; i++) {

            for (int j = 0; j < niz2.length; j++) {

                if (niz[i] == niz2[j]) {
                    System.out.println(niz[i] + " ");

                    // What now!?!?!?
                }

            }
        }

    }

}
4

7 に答える 7

2

セットを使用します。

LinkedHashSet<string> printNum = new LinkedHashSet<string>();
if(niz[i] == niz2[j])
{
      printNum.add( niz[i] );
}

// outside of loop
for( string s : printNum )
{
      System.out.println(s);
}
于 2013-06-21T17:53:33.990 に答える
1

ほとんどの人が提案Setしていますが、これが難しい方法です...

public static void main(String[] args) {

    String printed = "";

    Scanner scan = new Scanner(System.in);
    char niz[] = new char[100];
    char niz2[] = new char[100];


    System.out.print("Add the first string: ");
    niz = scan.nextLine().toCharArray();

    System.out.print("Add the second string: ");
    niz2 = scan.nextLine().toCharArray();


    for(int i = 0; i < niz.length; i++)
    {
        for(int j = 0; j < niz2.length; j++)
        {
                if(niz[i] == niz2[j])
                {                        
                    if(printed.indexOf(niz[i]) == -1) {
                           System.out.println(niz[i]+" ");
                    }

                    printed += niz[i];
                }
        }
    }
于 2013-06-21T18:09:11.160 に答える
1

ワンライナー:

HashSet<Character> common =
    new HashSet<Character>(Arrays.asList(niz1)).retainAll(
        new HashSet<Character>(Arrays.asList(niz2)));
于 2013-06-21T18:25:09.120 に答える
1

forループの最も内側のセクションで、それらをセットに追加したいと思うでしょう

mutuals.add(niz[i])

次に、最初のループの外側にこれを追加して宣言します

Set<char> mutuals = new HashSet<char>()

ループの外でこれを行うようにしてください

その後、ミューチュアルのすべてを印刷します

于 2013-06-21T17:55:55.530 に答える
1

必要なのは 2 つのセットの共通部分なので、使用できるのは ですSet.retainAll()

于 2013-06-21T18:15:13.497 に答える
1

これは、 two を利用して行うことができますHashSets

単語ごとに 1 つのハッシュセットがあります。word1 で文字に遭遇すると、set1 に入ります。word2 で文字に遭遇すると、set2 に入ります。

最後に、両方のセットにある文字のみを保持します。

import java.util.HashSet;
public class Zadatak4 {

    /**
     * @param args
     */
    public static void main(String[] args) {


        Scanner scan = new Scanner(System.in);
        char niz[] = new char[100];
        char niz2[] = new char[100];

        System.out.print("Add the first string: ");
        niz = scan.nextLine().toCharArray();

        System.out.print("Add the second string: ");
        niz2 = scan.nextLine().toCharArray();

        HashSet<Integer> set1 = new <String>HashSet();
        HashSet<Integer> set2 = new <String>HashSet();


        for(int i = 0; i < niz.length; i++)
        {
            if(!set1.contains(niz[i]));
            set1.add((int) niz[i]);         
        }

        for(int i = 0; i < niz2.length; i++)
        {
            if(!set2.contains(niz2[i]));
            set2.add((int) niz2[i]);            
        }


        Iterator<Integer> it = set1.iterator();
        int currentChar;
        while(it.hasNext())
        {
            currentChar = it.next();
            if(set2.contains(currentChar))
            System.out.println((char)currentChar);
        }
    }

}
于 2013-06-21T17:53:29.987 に答える
0

char を Set in に格納する

 Set<Character> cs=new HashSet<>();

 if(niz[i] == niz2[j])
 {
     cs.add(niz[i]); 
     //System.out.println(niz[i]+" ");

     //What now!?!?!?
 }
于 2013-06-21T17:54:54.493 に答える