2013-11-26 6 views
5

क्या कोई मुझे इस पायथन स्क्रिप्ट को जावा में परिवर्तित कर सकता है?पायथन से जावा कोड रूपांतरण

इस कोड

theHex = input("Hex: ").split() 
theShift = int(input("Shift: ")) 
result = "" 
for i in range (len(theHex)): 
    result += (hex((int(theHex[i],16) + theShift))).split('x')[1] + " " 
    print(result) 

यहाँ है मैं

System.out.print("Please enter the hex: "); 
String theHex = BIO.getString(); 
String[] theHexArray = theHex.split(" "); 

System.out.print("Please enter the value to shift by: "); 
int theShift = BIO.getInt(); 

String result[] = null; 

for(int i = 0 ; i < theHex.length() ; i++){ 
    //result += (hex((int(theHex[i],16) + theShift))).split('x')[1] + " " 
} 

toText(result[]); 

क्या मिल गया है जैव एक वर्ग मैं तार और Ints इकट्ठा करने के लिए है है। मूल रूप से एक स्कैनर के रूप में सोचें।

क्या कोई मुझे अंतिम पंक्ति का अनुवाद करने में मदद कर सकता है?

संपादित यहाँ toText विधि

public static void toText(String theHexArray[]){ 
    String theHex = ""; 

    for(int i = 0 ; i < theHexArray.length ; i++){ 
     theHex += theHexArray[i]; 
    } 

    StringBuilder output = new StringBuilder(); 
    try{ 
     for (int i = 0; i < theHex.length(); i+=2){ 
      String str = theHex.substring(i, i+2); 
      output.append((char)Integer.parseInt(str, 16)); 
     } 
    }catch(Exception e){ 
     System.out.println("ERROR"); 
    } 
    System.out.println(output); 
} 
+3

मैं वास्तव में इन तथाकथित "सहायक" कक्षाओं पर सवाल करता हूं जो वास्तव में आपके और स्कैनर के बीच एक अतिरिक्त परत हैं .. बिंदु पर: कोड को अनुवाद करने के लिए एक-एक करके प्रयास न करें। इसे विभाजित करें और देखें कि यह क्या करने का प्रयास कर रहा है, फिर इसे चरण-दर-चरण लागू करें। –

+0

क्या आप सरणी मुद्रित करना चाहते हैं? 'Java.util.Arrays।टूस्ट्रिंग (परिणाम) ' – PeterMmm

+0

@ जेरोवेनवेलवेल मैं केवल सादगी के लिए इसका उपयोग कर रहा हूं जैसा कि मैंने उपयोग किया है। टिप्पणी के लिए, मैंने कोशिश की है। हालांकि मैं यह नहीं ढूंढ पाया कि यह क्या कर रहा है क्योंकि मैं अजगर से परिचित नहीं हूं। मैंने दस्तावेज़ों को देखा है और इसे नहीं मिला है। यदि आप इसे जावा उन्मुख तरीके से समझा सकते हैं जो शायद मदद करेगा। – Kyle93

उत्तर

4

मुझे संदेह है कि आप वास्तव में इसकी आवश्यकता के मुकाबले अपने लिए यह और अधिक काम कर रहे हैं, लेकिन यहां जाता है।

यदि आप लाइन-बाय-लाइन पोर्ट के लिए जाने जा रहे हैं, तो करें।

  1. परिणाम तारों की एक सरणी के रूप में घोषित न करें। यह आपको सिर्फ सिरदर्द देगा। इसे या तो StringBuilder या एक सादा String बनाएं जैसा कि मैं यहां करता हूं (StringBuilder अधिक कुशल होगा, स्वीकार्य रूप से, लेकिन यह समझना शायद आसान है)। यह आपके पास पहले से मौजूद पायथन कोड के समान ही है।

  2. समझें कि आपका पायथन कोड क्या कर रहा है। यह हेक्स प्रारूप में एक स्ट्रिंग ले रहा है, इसे एक पूर्णांक में पार्स कर रहा है, एक मान (theShift) जोड़ रहा है, वापस हेक्स में परिवर्तित कर रहा है, और उसके बाद केवल स्ट्रिंग का संख्यात्मक हिस्सा (अग्रणी 0x के बिना) प्राप्त कर रहा है। तो जावा में, वह लूप इस तरह चला जाता है। (नोट: जावा में Integer.toString(x, 16) अग्रणी 0x प्रिंट करें, इसलिए हमें इसे काटने की आवश्यकता नहीं है)।

    String result = ""; 
    for (String thisHex : theHexArray) { 
        result += Integer.toString(Integer.parseInt(thisHex, 16) + theShift, 16) + " "; 
    } 
    
  3. toText विधि खोना। इस बिंदु पर आपके पास वह स्ट्रिंग है जो आप चाहते थे, ताकि विधि वास्तव में और कुछ भी न करे।

+0

बिल्कुल सही जवाब, बहुत बहुत धन्यवाद। महान स्पष्टीकरण – Kyle93

3

कि क्या आप कोड को समझने पर लाइन द्वारा लाइन, या काम का अनुवाद और उसके बाद समस्या के लिए एक जावा आधारित समाधान लिखने के लिए तय की परवाह किए बिना है, तो आप को तोड़ने की जरूरत है इसे समझने के लिए आखिरी पंक्ति नीचे। इस तरह इसे देख प्रयास करें:

result += (hex((int(theHex[i],16) + theShift))).split('x')[1] + " " 

के रूप में एक ही है -

val1 = int(theHex[i],16) 
val2 = (val1 + theShift) 
val3 = hex(val2) 
val4 = (val3).split('x') 
result += val4[1] + " " 

अब आप और अधिक स्पष्ट रूप से क्या कहा जाता है की जा रही है देख सकते हैं। आपका अगला कदम यह देखना है कि int, हेक्स और स्प्लिट कॉल क्या कर रहे हैं।

संबंधित मुद्दे