I:私はここのコードです...それはおそらく私がしばらく前に出ている必要があることを愚かなものだ、それは私がテストしたすべての数のために働くので、それは(ほとんど)コードで何か間違っていないと知っています私の答えが少し遅れていることを知っていますが、それがあなたを助けることを願っています。
私はちょうどあなたの質問を見て、自分自身に言いました。とにかく、あなたが持っていた問題を解決しようとしましたが、variable
という名前やその他の問題のために追いつくことができませんでした。
私が以下で実装した解決策は、手元の問題を解決するためにHashMap
を使用しています。私は少なくともコード内にコメントを提供するために最善を尽くしたので、それ以上の説明が必要な場合はコメントを自由に記述してください。クラス内
グローバル変数:2桁の番号について
private static void PE_Problem_17(){
wordsCollection.put(1,"one"); wordsCollection.put(2,"two"); wordsCollection.put(3,"three");
wordsCollection.put(4,"four"); wordsCollection.put(5,"five"); wordsCollection.put(6,"six");
wordsCollection.put(7,"seven"); wordsCollection.put(8,"eight"); wordsCollection.put(9,"nine");
wordsCollection.put(10,"ten"); wordsCollection.put(11,"eleven"); wordsCollection.put(12,"twelve");
wordsCollection.put(13,"thirteen"); wordsCollection.put(14,"fourteen"); wordsCollection.put(15,"fifteen");
wordsCollection.put(16,"sixteen"); wordsCollection.put(17,"seventeen"); wordsCollection.put(18,"eighteen");
wordsCollection.put(19,"nineteen"); wordsCollection.put(20,"twenty"); wordsCollection.put(30,"thirty");
wordsCollection.put(40,"forty"); wordsCollection.put(50,"fifty"); wordsCollection.put(60,"sixty");
wordsCollection.put(70,"seventy"); wordsCollection.put(80,"eighty"); wordsCollection.put(90,"ninety");
wordsCollection.put(100,"hundred");
int countLetters = oneThousand.length();
for (int number = 1; number <= 999; number++){
if(number <= 20) {
countLetters += wordsCollection.get(number).length(); // handle from 1 to 20
continue;
}
if(number <= 99) { // handle two digit numbers
countLetters += examineTwoDigits(number);
continue;
}
if(number <= 999){ // handle three digit numbers
countLetters += examineThreeDigits(number);
}
}
System.out.println("Result = " + countLetters); // print the result
}
ヘルパー方法:問題を解決するため
private static Map<Integer,String> wordsCollection = new HashMap<>();
private static String andWord = "and", oneThousand = "onethousand";
方法
private static int examineTwoDigits(int number){ // helper method for two digit numbers
int tempCount = 0;
if(number == 0) return 0;
if(number >= 1 && number <= 9){
tempCount += wordsCollection.get(number).length(); // get length of number from hashMap
return tempCount;
}
if(number % 10 == 0){
tempCount += wordsCollection.get(number).length(); // get length of number from hashMap
return tempCount;
}
for(int i = 1; i <= 20; i++){
if(i == number) {
tempCount += wordsCollection.get(number).length(); // get length of number from hashMap
return tempCount;
}
}
int leftNumber = number/10;
String leftNumberString = Integer.toString(leftNumber) + "0";
int rightNumber = number % 10;
tempCount += wordsCollection.get(Integer.parseInt(leftNumberString)).length();
tempCount += wordsCollection.get(rightNumber).length();
return tempCount; // return the length of words count
}
3桁の数字のためのヘルパーメソッド:
private static int examineThreeDigits(int number){ // helper method for 3 digits
int tempCount = 0;
int leftMostDigit = number/100; // get leftMost digit
tempCount += wordsCollection.get(leftMostDigit).length() + wordsCollection.get(100).length();
StringBuilder builder = new StringBuilder(Integer.toString(number));
builder.deleteCharAt(0);
if(Integer.parseInt(builder.substring(0,1)) != 0 || Integer.parseInt(builder.substring(1,2)) != 0){
tempCount+= andWord.length();
}
tempCount += examineTwoDigits(Integer.parseInt(builder.toString()));
return tempCount;
}
は、あなたがそれをデバッグしていますか?それが何を伝えましたか? – Carcigenicate
文字列を印刷したことがありますか? 'System.out.println(toWord(a));' - 最終的には一度発生し、最終結果に7文字を追加するエラーでなければなりません! –
はい、私はそれは普通のものを印刷しません。たぶん私は結局数えることはできません。:D – user2177595