2013-10-04 2 views
-1

좋아요, 코드는 꽤 간단합니다. generic 클래스 ourSet은 일부 요소를 가져와 LinkedList에 넣고 두 세트의 일부 함수를 수행합니다.스캐너 입력 허용 while 루프 내의 모든 다른 입력을 건너 뛰는 문자열입니다.

내 문제는 실제로 프로젝트의 일반적인 개념과는 관계가 없다. 내가 만든이 "사용자 입력 인터페이스"에 더 많은 것이있다. 나는 어떤 String을 받아 들여 세트에 추가하고, "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(); 
    } 
} 
+0

음. 그는 "그 답이"도움이되지 않는지를 알 수있는 "대답"을 찾을 기회가 없었습니다. 하지만 이봐, 이건 단지 논평 할 수 없어요. 그냥 그에게 링크를주고 snarky하지 마십시오. 이것은 "개발자는 배우고, 공유하고, 경력을 쌓을 수 있습니다."라고 광고되는 곳입니다. 초보자가 당당한 질문을하는 것을 두려워하지 않는 곳은 아닙니다. 그것은 시작하는 누군가를위한 공정한 질문입니다. 아무 것도 할 필요가 없습니다. – DSlomer64

답변

4

그 이유는 당신은 두 번input.nextLine()를 호출하는 것입니다 :

do { 

    set1.add(input.nextLine()); 

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

할-동안보다 훨씬 쉬운 방법은 잠시 :

while (!(String in = input.nextLine()).equals("EXIT")) { 
    set1.add(in); 
} 
+0

대단히 감사합니다. 나는 그것을 두 번 부르고 있다는 것을 깨닫지 못했다. 깨달았을 때 바보 같다. +1 다시 대답 – user2844764

+0

@ user2844764이 답변이 문제의 해결책이라면, 그것을 수락하는 것을 잊지 마십시오. 감사! – MDrabic

0

당신은 당신이 한 번 입력을 요청 정지 또는 세트에 추가하거나 것을 사용할 필요가 두 번

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 

입력을 부탁드립니다.

0
당신이 그것을 말 했어요 정확히하고있다

당신 루프 ...

  • 행의 텍스트를 읽어들과 set1
  • 에 추가 행의 텍스트를 읽어들과 같 있는지 확인 필요에 따라 "EXIT"
  • 반복 ...

그래서, 매 초마다 요청은 종료 상태를 확인하기 위해 사용되고있다. 대신

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

가 PS- 그래, 나도 알아, 당신이 break을 사용할 수 ... 변수에 입력에서 텍스트를 할당하고, 예를 들어, 당신에게 검사를 할 그것을 사용한다)