2014-06-20 3 views
4

사용자로부터 의견을 받아야합니다. 그들은 새로운 꽃을 창조하게됩니다. 사용자는 꽃의 이름 (String), 꽃의 색 (String), 꽃의 가시 수 (int) 및 꽃의 냄새 (String)를 알려줍니다. 나는 이것을 얻기 위해 하나의 스캐너라는 이름의 입력을 사용했다. 그러나 제대로 작동하지 않습니다. 가시가 많아지면 프로그램은 사용자에게 꽃 냄새가 어떤지 묻습니다. 그러나 대답을 입력 할 수 없습니다. 그러나 가시의 수를 얻기 위해 input2라는 두 번째 스캐너를 만들었으므로 제대로 작동합니다.Java에서 다른 유형의 입력에 대해 다른 Scanner 인스턴스를 사용해야합니까?

import java.util.Scanner; 
import java.util.ArrayList; 

public class AssignmentTwo { 

    static ArrayList<FlowerClass> flowerPack = new ArrayList<FlowerClass>(); 


    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 

     while(true){ 
      System.out.println("1. Add flower to flowerpack."); 
      System.out.println("2. Remove flower from the flowerpack."); 
      System.out.println("3. Search for a flower in the flowerpack."); 
      System.out.println("4. Display the flowers in the flowerpack."); 

      int userChoice = input.nextInt(); 

      switch(userChoice){ 
      case 1: 
       addFlower(); 
       break; 
      case 2: 
       //removeFlower(); 
       break; 
      case 3: 
       //searchFlower(); 
       break; 
      case 4: 
       displayFlowers(); 
       break; 
      case 5: 
       System.out.println("Goodbye!"); 
       System.exit(0); 
      } 
     } 
    } 

    public static void addFlower(){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("What is the flower's name?"); 
     String desiredName = input.nextLine(); 
     System.out.println("What is the flower's color?"); 
     String desiredColor = input.nextLine(); 
     System.out.println("How many thorns does it have?"); 
     Scanner input2 = new Scanner(System.in); 
     int desiredThorns = input2.nextInt(); 
     System.out.println("What does it smell like?"); 
     String desiredSmell = input.nextLine(); 
     flowerPack.add(new FlowerClass(desiredName, desiredColor, desiredThorns, desiredSmell)); 
    } 

    public static void displayFlowers(){ 

     for (FlowerClass flower: flowerPack){ 
      System.out.println(flower.getName()); 
     } 
     System.out.println("Number of flowers in pack: " + FlowerClass.numberFlowers()); 

    } 
} 

내 addFlower()를 보면 당신은 내가 스캐너 입력 2를 만들 부분을 확인하고 새로운 꽃이 가시의 수의 INT를 얻기 위해 입력 2 사용할 것이다 기능 : 여기에 코드입니다. 이전에는 함수의 첫 번째 Scanner 인스턴스를 사용하여 가시의 개수에 대한 입력을 얻었습니다. 그러나 제대로 작동하지 않습니다. 이전 기능은 다음과 같습니다.

public static void addFlower(){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("What is the flower's name?"); 
     String desiredName = input.nextLine(); 
     System.out.println("What is the flower's color?"); 
     String desiredColor = input.nextLine(); 
     System.out.println("How many thorns does it have?"); 
     int desiredThorns = input.nextInt(); 
     System.out.println("What does it smell like?"); 
     String desiredSmell = input.nextLine(); 
     flowerPack.add(new FlowerClass(desiredName, desiredColor, desiredThorns, desiredSmell)); 
    } 

첫 번째 버전의 기능이 작동하지 않는 이유가 있습니까? 새 스캐너를 사용하여 문제를 해결했지만 첫 번째 버전이 작동하지 않는 이유를 알지 못합니다. 여러 종류의 입력에 대해 단일 스캐너를 사용하려고하면 스캐너가 혼란 스럽습니까? Java 튜토리얼 문서에서 Scanning 자습서를보고 있는데 대답이 표시되지 않습니다. 시간 내 줘서 고마워!

답변

2

hangup은 nextInt() 다음에 nextLine()을 호출 할 때 nextInt()에서 파싱되지 않은 개행을 줄 끝으로 계산하므로 스캐너에서 ' 다시 끝났어. 이것을 줄이기위한 방법은 항상 nextLine을 호출하는 것이지만 결과 문자열을 Int로 구문 분석하는 것입니다.

대부분의 경우이 작업을 수행하는 것이 좋지 않다고 생각하지만 귀하의 경우 도움이 될 것 같습니다.

public static void addFlower(){ 
    Scanner input = new Scanner(System.in); 
    ... 
    int desiredThorns = Integer.parseInt(input.nextLine()); 
    ... 
    flowerPack.add(new FlowerClass(desiredName, desiredColor, desiredThorns, desiredSmell)); 
} 
+0

감사합니다. 그래서 다른 종류의 입력을 원할 때 새로운 스캐너를 사용하는 것이 가장 좋을까요? – HandleThatError

+1

@HandleThatError 새 스캐너가 필요하지 않습니다. 개행을 사용하는 스캐너의 다음 명령과 그렇지 않은 다음 명령의 차이점을 인식하면됩니다. – azurefrog

+0

+ 1azurefrog. 맞아. 내 경험에 비추어 볼 때, 스캐너는 엉덩이에 통증이 생기지 만 일단 경험이 있으면 그 특이성이 더 낫습니다. – SWPhantom

관련 문제