वर्तमान में नंबर टू वर्ड्स नामक एक चुनौती करते हुए, मैंने 2 विधियाँ बनाई हैं, एक जो मूल्यों की व्यक्तिगत रूप से तुलना करने से संबंधित है ताकि वह अपने स्ट्रिंग मान (नंबर टॉवर्ड नामक विधि) को प्रिंट कर सके, एक अन्य विधि जिसे रिवर्स कहा जाता है जो मूल रूप से मूल्यों को फिर से ऑर्डर करता है ताकि यह एक सही क्रम में मुद्रित होता है, उदाहरण के लिए: चरण एक 567 -> चरण 2, इसे 765 में परिवर्तित किया जाएगा -> चरण 3, रिवर्स विधि फिर इसे व्यक्तिगत रूप से 5,6,7 में परिवर्तित कर देगी ताकि यह if कथनों के साथ मानों की तुलना कर सकते हैं। हालांकि, मैंने इसे काम करने के लिए बहुत सी चीजों की कोशिश की है, मैं इसे चरण 3 में बनाने में कामयाब रहा, लेकिन जब मैं मान वापस करने का प्रयास करता हूं तो यह मुझे परिवर्तित होने से पहले 3 यादृच्छिक मान देता है जैसे = 7,6,7 ... 5 ,6,7, मैं यह पता लगाने में असमर्थ हूं कि पहले 3 मानों को कैसे हटाया जाए और केवल अंतिम तीन मानों को वापस किया जाए ताकि इसकी तुलना संख्या-शब्द विधि में की जा सके।
package com.company;
public class Main {
public static void main(String[] args) {
numberToWords(567);
}
public static void numberToWords(int number) {
int lastDigit = 0;
int digit = number;
int reverseDigit = 0;
if (number < 0) {
System.out.println("Invalid Value");
}
for (int i = 0; i < digit; i++) {
//so we are taking the last digit from 567 per iteration
lastDigit = digit % 10;
//we are then dividing the digit by 10 each time so we can get another last digit
digit /= 10;
//i will now try to essentially get down to the final number which will be flipped
reverseDigit = (reverseDigit * 10) + lastDigit;
//checking values
System.out.println(reverse(reverseDigit));
// if (reverse(reverseDigit)== 0) {
// System.out.println("Zero");
// } else if (reverse(reverseDigit) == 1) {
// System.out.println("One");
// }else if (reverse(reverseDigit) == 2) {
// System.out.println("Two");
// }else if (reverse(reverseDigit) == 3) {
// System.out.println("Three");
// }else if (reverse(reverseDigit) == 4) {
// System.out.println("Four");
// }else if (reverse(reverseDigit) == 5) {
// System.out.println("Five");
// }else if (reverse(reverseDigit) == 6) {
// System.out.println("Six");
// }else if (reverse(reverseDigit) == 7) {
// System.out.println("Seven");
// }else if (reverse(reverseDigit) == 8) {
// System.out.println("Eight");
// }else if (reverse(reverseDigit) == 9) {
// System.out.println("Nine ");
// }
if (lastDigit == 0) {
System.out.println("Zero");
} else if (lastDigit == 1) {
System.out.println("One");
} else if (lastDigit == 2) {
System.out.println("Two");
} else if (lastDigit == 3) {
System.out.println("Three");
} else if (lastDigit == 4) {
System.out.println("Four");
} else if (lastDigit == 5) {
System.out.println("Five");
} else if (lastDigit == 6) {
System.out.println("Six");
} else if (lastDigit == 7) {
System.out.println("Seven");
} else if (lastDigit == 8) {
System.out.println("Eight");
} else if (lastDigit == 9) {
System.out.println("Nine");
}
}
}
public static int reverse (int a){
int lastDigit = 0;
for (int i =0; i < a; i++) {
lastDigit = a % 10;
a /= 10;
//testing values here
//System.out.println(lastDigit);
//sout in loop gives us 567
}
return lastDigit;
}
}
2 जवाब
अगर मैं समझता हूं कि आपको सही तरीके से क्या चाहिए, तो आपको इतना कोड नहीं चाहिए। बस विभाजन के रिमाइंडर को 10 से प्रिंट करें और फिर अगले पुनरावृत्ति के लिए दस से विभाजित करें जब तक कि आपको शून्य न मिल जाए।
enum Numbers {
Zero,
One,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine;
}
private static void process(int number) {
do {
final int digit = number % 10;
System.out.println(Numbers.values()[digit]);
number /= 10;
} while (number > 0);
}
पहले एक एनम का उपयोग करें क्योंकि आप इसे एक सरणी की तरह उपयोग कर सकते हैं लेकिन घोषित करना आसान है। फिर आपको जो नंबर मिलता है, उसके साथ पहले दस से अधिक रिमाइंडर प्राप्त करें। दशमलव के रूप में व्यक्त किसी भी पूर्णांक के लिए दस से अधिक का रिमाइंडर अंतिम अंक होता है। चूंकि आपको अंतिम अंक को पहले स्थान पर प्रिंट करना है, बस इसे प्रिंट करें। फिर संख्या को दस से विभाजित संख्या से बदलें। यह अंतिम अंक (जिसे अभी प्रिंट किया गया है) को त्याग देगा क्योंकि यह एक पूर्णांक विभाजन है। मेरा मतलब है, १२३४ बटा १० १२३.४ है, लेकिन क्योंकि ये पूर्णांक हैं, इसे १२३ तक छोटा कर दिया जाता है। तो अब लूप और अंतिम अंक फिर से प्रिंट किया जाएगा (लेकिन अब यह विभाजन के कारण बाईं ओर पहला होगा)। किसी बिंदु पर, मूल संख्या के पहले अंक को प्रिंट करने के बाद आपके पास एक अंक पूर्णांक (यानी 7) होगा जो दस से विभाजित होगा जिसके परिणामस्वरूप शून्य होगा (क्योंकि यह 0.7 होगा लेकिन यह एक पूर्णांक विभाजन है)। आपको कुछ पूर्व शर्त जोड़ने की जरूरत है जैसे कि नकारात्मक।
मुझे लगता है कि आपके पास numberToWords() और रिवर्स() के लिए शेष भाग करने का सही विचार है। लेकिन मुझे लगता है कि आप लूप के लिए बाहर निकलने की शर्त गलत हैं
for (int i = 0; i < digit; i++)
सभी अंक प्राप्त करने से पहले यह बाहर निकल जाएगा। आप तब तक लूप करना चाहते हैं जब तक अंक 0 न हो, क्योंकि आप शेष भाग को तब तक विभाजित करना चाहते हैं जब तक कि विभाजित करने के लिए और कुछ नहीं है (अर्थात् अंक 0 है)।
इसलिए
for(int i = 0; digit != 0; i++){
...
}
जबकि लूप के लिए लूप से बेहतर हो सकता है क्योंकि आप वैसे भी i का उपयोग नहीं कर रहे हैं।
while(digit != 0){
...
}
यह इस बात पर भी निर्भर करता है कि आप किस IDE का उपयोग कर रहे हैं लेकिन IntelliJ और ग्रहण लाइन डिबग द्वारा एक लाइन कर सकते हैं ताकि आप देख सकें कि कौन सी लाइन समस्या पैदा कर रही है।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।