-1

さて、コードはかなり簡単です。いくつかの要素を取り込んで LinkedList に入れ、2 つのセットに対していくつかの機能を実行するジェネリック クラス ourSet。

私の問題は、実際にはプロジェクトの一般的な概念とはまったく関係がなく、私が作成した「ユーザー入力インターフェイス」にあります。いくつかの文字列を取り込んでセットに追加し、文字列「EXIT」(すべて大文字) を受け取りながらループを終了し、次のセットに対して同じことを行います。何が起こっているかというと、do while ループはすべての奇数に対して 1 番目、3 番目、5 番目、.. のみを送信しているということです。

package set.pkgclass;

import java.util.Scanner; 
import java.util.LinkedList; 


public class SetClass {


public static void main(String[] args) {

    ourSet<String> set1 = new ourSet<String>();  
    ourSet<String> set2 = new ourSet<String>(); 
    Scanner input = new Scanner(System.in); 



    System.out.println("Please enter a string to put in set 1, "
            + "type EXIT (in all caps) to end.");


    do {

        set1.add(input.nextLine());

    }
    while (!"EXIT".equals(input.nextLine()));


    System.out.println("Please enter a string to put in set 2, "
            + "type EXIT (in all caps) to end");

    do {

        set2.add(input.nextLine());
    }
    while (!"EXIT".equals(input.nextLine()));



    ourSet.intersection(set1,set2); 
    ourSet.difference(set1, set2);
    ourSet.union(set1, set2);








     }
  }

class ourSet<T>{




private LinkedList<T> mySet = new LinkedList<>();



public void add(T element){      
    mySet.add(element);
}

public void remove(T element){        
    mySet.remove(element);
}

public boolean membership(T element){        
    if(mySet.contains(element) == true) {
        return true; 
    }

    else {
    return false;
    }
}


public static <T> void union(ourSet<T> s1, ourSet<T> s2){
    System.out.print("The union is: ");
    for (int i=0; i < s1.mySet.size(); i++) {
        T t = s1.mySet.get(i);
        if (!s2.mySet.contains(t)){
            s2.add(t);
            }

    }

    for (int i=0; i < s2.mySet.size(); i++){
        T t = s2.mySet.get(i);
        System.out.print(t+", ");
    }
    System.out.println();  


}
public static <T> void intersection(ourSet<T> s1, ourSet<T> s2){ 
    System.out.print("The intersection is: ");
    for (int i=0; i < s1.mySet.size(); i++) {
        T t = s1.mySet.get(i); 
        if (s2.mySet.contains(t)) {
            System.out.print(t+", ");
        }
    }
    System.out.println();

}

public static <T> void difference(ourSet<T> s1, ourSet<T> s2){
    System.out.print("The difference is: ");
    for (int i=0; i < s1.mySet.size(); i++) {
        T t = s1.mySet.get(i);
        if (!s2.mySet.contains(t)) {
            System.out.print(t+", ");
        }

    }
    System.out.println();  
   }
 }
4

3 に答える 3

4

input.nextLine() その理由は、 2 回呼び出しているためです。

do {

    set1.add(input.nextLine());

}
while (!"EXIT".equals(input.nextLine()));

do-while よりもはるかに簡単な方法は while です。

while (!(String in = input.nextLine()).equals("EXIT")) {
    set1.add(in);
}
于 2013-10-04T00:22:52.520 に答える
0

2回入力を求めます

do {

    set1.add(input.nextLine()); // you enter a number

}
while (!"EXIT".equals(input.nextLine())); // what if you enter another number? 
// it'll just loop again, skipping that number

一度入力を求め、それを使用して停止するか、セットに追加する必要があります。

于 2013-10-04T00:21:34.493 に答える
0

あなたのループは、あなたが指示したことを正確に実行しています...

  • テキストの行を読み込んで追加するset1
  • テキストの行を読み、それが等しいかどうかを確認します"EXIT"
  • 必要に応じて繰り返し...

そのため、毎秒のリクエストが終了状態のチェックに使用されています。代わりに、入力からのテキストを変数に割り当て、それを使用してチェックを行う必要があります。たとえば...

do {
    String text = input.nextLine();
    if (!"EXIT".equals(text)) {
        set1.add();
    }
} while (!"EXIT".equals(text));

ps-はい、知っています。使用できますbreak;)

于 2013-10-04T00:22:20.330 に答える