2014-11-04 3 views
1

문자열을 MeterNumber로 변환하는 메서드가 있습니다. 코드는 다음과 같습니다. 난 그냥 제공하는 경우누군가가 나를이 toString 메서드를 수정하는 데 도움을 줄 수 있습니까?

531 481 889 O 788.5 
652 364 795 P 2442.7 

그것은 잘 작동합니다 :

531 481 889 
652 364 795 

을가 null를 돌려 그러나 내 입력이 형식 인 경우

public static MeterNumber fromString(String number) { 
     MeterNumber mn = new MeterNumber(false); 
     int i = 0, // position in number 
      n = 0, // number of digits 
      len = number.length(); 
     boolean valid = true; 
     while (valid && i < len) { 
     char c = number.charAt(i); 
     i = i + 1; 
     if (n < 9 && Character.isDigit(c)) { 
      mn.digits[n] = c - '0'; 
      n = n + 1; 
     } else if (Character.isWhitespace(c)) { 
      // skip spaces 
     } else { 
      valid = false; 
     } 
     } 
     int cs = mn.checksum(); 
     if (valid && i == len && n == 9 && 
      cs/10 == mn.digits[7] && cs % 10 == mn.digits[8]) { 
     return mn; 
     } else { 
     return null; 
     } 
    } 

이 같은 입력을 읽을 생각이야 :

531 481 889 O 788.5 
652 364 795 P 2442.7 

문제를 봅니다. 왜 선의 끝에서 Char와 double이 간섭합니까?

이것은 메소드를 호출하는 코드입니다. 사전에

Scanner sc2 = new Scanner(new java.io.File("Readings.txt")); 
     Meter meter = Meter.load(sc2); 

     System.out.println(meter.getMeterNumber()); 

감사 :

private MeterNumber meterNumber; 


public static Meter load(Scanner sc) { 
     MeterNumber meterNumber = MeterNumber.fromString(sc.nextLine()); 
     int n = 1; 
     sc.nextLine(); 
     Tariff[] tariffs = new Tariff[n]; 
     for (int i = 0; i < n; i++) { 
     String kind = sc.next(); 
     sc.nextLine(); 
     if (kind.equals("P")) { 
      tariffs[i] = PeakTariff.PEAK_TARIFF; 
     } else if (kind.equals("O")) { 
      tariffs[i] = OffPeakTariff.OFF_PEAK_TARIFF; 
     } 
     } 
     return new Meter(meterNumber, tariffs); 
    } 

public MeterNumber getMeterNumber() { 
     return meterNumber; 
    } 

} 

내 주요 메서드에서 호출하는 코드입니다.

+0

'MeterNumber'란 무엇입니까? –

+0

9 자리 숫자입니다 – lolian

+0

Runnable 코드를 제공해야합니다. 그래서 우리는'MeterNumber'에 대한 코드를 보여줄 필요가 있습니다 –

답변

0

유효하지 않다고 말했기 때문에 null을 반환합니다.

while (valid && i < len) { 
    char c = number.charAt(i); 
    i = i + 1; 
    if (n < 9 && Character.isDigit(c)) { 
     mn.digits[n] = c - '0'; 
     n = n + 1; 
    } else if (Character.isWhitespace(c)) { 
     // skip spaces 
    } else { //this else is the problem 
     valid = false; 
    } 
    } 

당신은 어느 공백이나 숫자 인 경우 false로 valid를 설정하는 데 말했다. O와 P는 숫자 나 공백이 아니므로, valid를 false로 설정합니다.

if (valid && i == len && n == 9 && 
     cs/10 == mn.digits[7] && cs % 10 == mn.digits[8]) { 
    return mn; 
    } else { 
    return null; 
    } 

if 문이 올바른지 먼저 확인합니다. 그것이 없기 때문에 null을 반환합니다.

관련 문제