2016-10-23 1 views
0

문자열과 복식을 포함하는 텍스트 파일을 가격 목록으로 읽고 해시 맵에 저장하는 Java 프로그램 작성. nextDouble() 줄에서 "java.util.InputMismatchException"오류가 계속 발생합니다. 코드 :문자열과 더블을 포함하는 외부 텍스트 파일에서 스캐너 사용

다음과
public static void main(String[] args) throws IOException { 

     String priceList = "src/" + args[0]; 
     String cartOne = "src/" + args[1]; 
     String cartTwo = "src/" + args[2]; 
     Scanner priceScan = new Scanner(new File(priceList)); 
     priceScan.useDelimiter(" "); 
     HashMap<String, Double> prices = new HashMap<String, Double>(); 
     priceScan.useDelimiter(" "); 
     while (priceScan.hasNext()) { 
      String name = priceScan.next(); 
      Double price = priceScan.nextDouble(); 
      prices.put(name, price); 

     } 
     priceScan.close(); 
     System.out.println(prices); 
    } 

텍스트 파일입니다 같이

TV   999.99 
Table   199 
Bed   499.99 
Chair   45.49 
Milk 3.00 
Butter 2.84 
Tomato 0.76 
Onion 0.54 
Lettuce 1.00 
Ham 2.50 
Bread 1.75 
+0

나는 "당신이 정말로 여기에 구분 기호가 필요하십니까?"두렵다 –

답변

1

지도에서 문자열을 두 배로 매핑해야하는 경우지도에서 문자열을 문자열로 매핑했습니다.

Scanner priceScan = new Scanner(new File(priceList)); 
HashMap<String, Double> prices = new HashMap<String, Double>(); 
while (priceScan.hasNext()) { 
    String name = priceScan.next(); 
    Double price = priceScan.nextDouble(); 
    prices.put(name, price); 
} 
priceScan.close(); 
0

당신은 인자로 String 대신에 Double 전달된다. 오류는 명백합니다.

HashMap<String, String> prices = new HashMap<String, String>(); 

prices.put(name, price); //price is a Double 
0

스캐너가 이미 토큰을 결정하기 위해 구분 기호로 공간을 사용하기 때문에 useDelimiter()를 호출 필요가 없습니다.

또한 HashMap 값의 데이터 형식을 변경하십시오. 여기

는 최종 프로그램 및 샘플 실행 :

import java.io.*; 
import java.util.*; 

class abcd 
{ 
public static void main(String[] args) throws IOException { 

     String priceList = "file"; 
     //String cartOne = "src/" + args[1]; 
     //String cartTwo = "src/" + args[2]; 
     Scanner priceScan = new Scanner(new File(priceList)); 
     HashMap<String, Double> prices = new HashMap<String, Double>(); 
     while (priceScan.hasNext()) { 
      String name = priceScan.next(); 
      Double price = priceScan.nextDouble(); 
      prices.put(name, price); 

     } 
     priceScan.close(); 
     System.out.println(prices); 
    } 
} 

샘플 실행 :

$ cat file 
TV   999.99 
Table   199 
Bed   499.99 
Chair   45.49 
Milk 3.00 
Butter 2.84 
Tomato 0.76 
Onion 0.54 
Lettuce 1.00 
Ham 2.50 
Bread 1.75 
$ javac abcd.java 
$ java abcd 
{Bed=499.99, TV=999.99, Lettuce=1.0, Table=199.0, Chair=45.49, Onion=0.54, Ham=2.5, Butter=2.84, Tomato=0.76, Milk=3.0, Bread=1.75} 
관련 문제