2017-12-03 9 views
-3

제 구조화 된 프로그래밍 강의에서 정수를 읽을 수있는 수로 변환하고 읽을 수있는 수를 정수로 변환하는 작업을 도와주세요. 예를 들면 :Java에서 읽을 수있는 숫자를 정수로 변환하기 (구조화 된 프로그래밍)

input 
499 

output 
four hundred ninety nine 

코드는 다음과 같습니다

public static String numberToSentence (Double angka) { 
    String[] angkaTerbilang={"","Satu","Dua","Tiga","Empat","Lima","Enam","Tujuh","Delapan","Sembilan","Sepuluh","Sebelas"}; 
    if(angka < 12) 
     return angkaTerbilang[angka.intValue()]; 
    if(angka >=12 && angka <= 19) 
     return angkaTerbilang[angka.intValue() % 10] + " Belas"; 
    if(angka >= 20 && angka <= 99) 
     return numberToSentence(angka/10) + " Puluh " + angkaTerbilang[angka.intValue() % 10]; 
    if(angka >= 100 && angka <= 199) 
     return "Seratus " + numberToSentence(angka % 100); 
    if(angka >= 200 && angka <= 999) 
     return numberToSentence(angka/100) + " Ratus " + numberToSentence(angka % 100); 
    if(angka >= 1000 && angka <= 1999) 
     return "Seribu " + numberToSentence(angka % 1000); 
    if(angka >= 2000 && angka <= 999999) 
     return numberToSentence(angka/1000) + " Ribu " + numberToSentence(angka % 1000); 
    if(angka >= 1000000 && angka <= 999999999) 
     return numberToSentence(angka/1000000) + " Juta " + numberToSentence(angka % 1000000); 

    return ""; 
} 

하지만 난 수를 정수로 읽을 수로 변환하는 방법을 혼동. 도와주세요.

+3

문장 대 숫자 기능을 작성한 다음 문제가있는 단계를 구체적으로 물어보십시오. – tkruse

+0

질문 : 당신이 기대하는 범위가 얼마나 큰가요? – Annonymous177

+0

@Ebraheem Alrabee의 방법을 권하고 싶을 때 작 으면. 수백 개에 들어가기에는 너무 크면 관리하기에는 너무 많을 것입니다. '100'은'seratus ', 200은'Dua Ratus', 기술적으로는 번호 매기기에서 패턴을 찾는 것이 좋습니다. 대부분의 언어로 전화를 걸 때 패턴을 찾을 수 있습니다. 표본 크기가 커질 때 추천하는 것은 정규 표현식을 사용하는 것입니다. (성가신 일입니다.) 문자열을'stringtokenizer'와 비교하는 것입니다. – Annonymous177

답변

0

사용중인 언어가 무엇인지 알 수 없습니다.

하지만 연수생, 내가 예 도움을 당신이 문제를 해결하기 위해 희망했을 때이 내가 과거에 한 예입니다

더 큰 수를 if 문을 계속 추가 할 수 있습니다 ..

private static String[] tensNumberNameArray = { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; 
private static String[] singleWordNumberNameArray = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 
     "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; 
private static Map<String, String> numberNameMap = new HashMap<>(); 
static { 
    numberNameMap.put("zero", "0"); 
    numberNameMap.put("one", "1"); 
    numberNameMap.put("two", "2"); 
    numberNameMap.put("three", "3"); 
    numberNameMap.put("four", "4"); 
    numberNameMap.put("five", "5"); 
    numberNameMap.put("six", "6"); 
    numberNameMap.put("seven", "7"); 
    numberNameMap.put("eight", "8"); 
    numberNameMap.put("nine", "9"); 
    numberNameMap.put("ten", "10"); 
    numberNameMap.put("eleven", "11"); 
    numberNameMap.put("twelve", "12"); 
    numberNameMap.put("thirteen", "13"); 
    numberNameMap.put("fourteen", "14"); 
    numberNameMap.put("fifteen", "15"); 
    numberNameMap.put("sixteen", "16"); 
    numberNameMap.put("seventeen", "17"); 
    numberNameMap.put("eighteen", "18"); 
    numberNameMap.put("nineteen", "19"); 
    numberNameMap.put("twenty", "20"); 
    numberNameMap.put("thirty", "30"); 
    numberNameMap.put("forty", "40"); 
    numberNameMap.put("fifty", "50"); 
    numberNameMap.put("sixty", "60"); 
    numberNameMap.put("seventy", "70"); 
    numberNameMap.put("eighty", "80"); 
    numberNameMap.put("ninety", "90"); 
} 

public static void main(String[] args) { 
    String path = "c:/num.txt"; 
    try (PrintWriter numberWriter = new PrintWriter(new File(path)); Scanner numberReader = new Scanner(new File(path))) { 
     for (int i = 0; i < 10000; i ++) { 
      numberWriter.println(numberToSentence(i)); 
      numberWriter.flush(); 
     } 
     while (numberReader.hasNext()) { 
      System.out.println(sentenceToNumber(numberReader.nextLine())); 
     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

} 

public static String numberToSentence(Integer num) { 
    if (num != 0) { 
     if (num > 0 && num < 20) { 
      return singleWordNumberNameArray[num]; 
     } else if (num > 19 && num < 100) { 
      return tensNumberNameArray[num/10] + " " + (num % 10 == 0 ? "" : numberToSentence(num % 10)); 
     } else if (num > 99 && num < 1000) { 
      return singleWordNumberNameArray[num/100] + " hundred " + (num % 100 == 0 ? "" : "and " + numberToSentence(num % 100)); 
     } else if (num > 999 && num < 10000) { 
      return singleWordNumberNameArray[num/1000] + " thousand " + (num % 1000 == 0 ? "" : "and " + numberToSentence(num % 1000)); 
     } 
    } else { 
     return singleWordNumberNameArray[num]; 
    } 
    return ""; 
} 

public static int sentenceToNumber(String numStr) { 
    String[] numParts = numStr.split(" and "); 
    StringBuilder integerNum = new StringBuilder(""); 
    for (String part : numParts) { 
     String[] partIsParts = part.split(" "); 
     if (part.contains("thousand")) { 
      integerNum.append(numberNameMap.get(partIsParts[0])); 
      integerNum.append("000"); 

     } else if (part.contains("hundred")) { 
      if (integerNum.length() == 0) { 
       integerNum.append(numberNameMap.get(partIsParts[0]) + "00"); 
      } else { 
       integerNum.setCharAt(integerNum.length() - 3, numberNameMap.get(partIsParts[0]).charAt(0)); 
      } 
     } else { 
      if (integerNum.length() == 0) { 
       if (part.split(" ").length == 2) { 
        integerNum.append(numberNameMap.get(partIsParts[0])); 
        integerNum.setCharAt(integerNum.length() - 1, numberNameMap.get(partIsParts[1]).charAt(0)); 
       } else { 
        integerNum.append(numberNameMap.get(partIsParts[0])); 
       } 

      } else if (part.split(" ").length == 2) { 
       integerNum.setCharAt(integerNum.length() - 2, numberNameMap.get(partIsParts[0]).charAt(0)); 
       integerNum.setCharAt(integerNum.length() - 1, numberNameMap.get(partIsParts[1]).charAt(0)); 

      } else if ("zero one two three four five six seven eight nine".contains(part)) { 
       integerNum.deleteCharAt(integerNum.length() - 1); 
       integerNum.append(numberNameMap.get(partIsParts[0])); 
      } else { 
       integerNum.deleteCharAt(integerNum.length() - 1); 
       integerNum.deleteCharAt(integerNum.length() - 1); 
       integerNum.append(numberNameMap.get(partIsParts[0])); 
      } 
     } 
    } 
    return Integer.parseInt(integerNum.toString()); 
}