एक 2 डी सरणी मिररिंग: "निश्चित रूप से प्रकार 'डबल' से 'डबल' * * * * '' रूपांतरित नहीं कर सकता

मेरे पास एक सरणी है जो इनपुट के रूप में 2 डी सरणी लेती है, और इसे फ़्लिप करती है। उदाहरण के लिए:

इनपुट:

0 1 0
0 2 0
0 3 4

उत्पादन:

0 3 4
0 2 0
0 1 0

संलग्न विधि है

    static double[,] flipArray(double[,] inputArray) {
        for (int i = 0; i < (inputArray.Length/2); i++) {
            double temp = inputArray[i,0];
            inputArray[i, 0] = inputArray[inputArray.GetLength(0)-i-1,0];
            inputArray[inputArray.GetLength(0)-i-1,0] = temp;
        }
        return inputArray;
    }

परिणामस्वरूप मुझे प्राप्त त्रुटि यह है:

enter image description here

मैं प्रभावी रूप से पहली पंक्ति ले रहा हूं, और उसके क्रम को उलट रहा हूं, और उलटा-पंक्ति सरणी लौट रहा हूं। शायद यह सी # के कुछ बुनियादी वाक्यविन्यास की मेरी गलतफहमी है क्योंकि मैं मुख्य रूप से जावा डेवलपर हूं। धन्यवाद!

दूसरा संपादित करें:

public static void flipInPlace(Object[][] theArray) {
    for(int i = 0; i < (theArray.length/2); i++) {
        Object[] temp = theArray[i];
        theArray[i] = theArray[theArray.length - i - 1];
        theArray[theArray.length - i - 1] = temp;
    }
}

ऊपर दी गई विधि को उपरोक्त जावा विधि से इस थ्रेड से अनुकूलित किया गया था।

0
यदि आप double [] [] प्रकार की एक जंजीर सरणी का उपयोग करते हैं तो यह करना बहुत आसान होगा।
जोड़ा लेखक ja72, स्रोत

2 उत्तर

double[,] indicates an array, but you only need to store a single value. Make temp a simple double:

static double[,] flipArray(double[,] inputArray) {
    for (int i = 0; i < (inputArray.Length/2); i++) {
        double temp = inputArray[i,0];
        inputArray[inputArray.Length - i - 1,0] = temp;
    }
    return inputArray;
}

लेकिन आपके पास अभी भी आपके कोड में अधिक समस्याएं हैं। आपको पंक्तियों दोनों पंक्तियों के माध्यम से लूप करना होगा। इसके अलावा, आपको बस लंबाई की बजाय GetLength (n) का उपयोग करना होगा। अंत में, इसे इस तरह थोड़ा दिखना चाहिए:

static double[,] flipArray(double[,] inputArray) {
    int height = inputArray.GetLength(0);
    int width = inputArray.GetLength(1);
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < height/2; j++) {
            double temp = inputArray[j, i];
            inputArray[j, i] = inputArray[height - j - 1, i];
            inputArray[height - j - 1,  i] = temp;
        }
    }
    return inputArray;
}
0
जोड़ा
क्या यह वास्तव में काम करता है, यद्यपि? मैं यह देखने की कोशिश कर रहा हूं कि यह प्रत्येक पंक्ति में पहले कॉलम को कैसे नहीं फिसलता है (, 0] से) और शेष कॉलम अकेले छोड़ दें।
जोड़ा लेखक Adam V, स्रोत
धन्यवाद! वह काम किया। मैं अब समझता हूं - इसलिए अस्थायी रूप से एक साधारण डबल था, और एक सरणी नहीं थी। inputArray [i, 0] एक डबल सरल है।
जोड़ा लेखक theGreenCabbage, स्रोत
मुझे एक लाइन याद आ रही है मैंने अपना कोड अपडेट किया है।
जोड़ा लेखक theGreenCabbage, स्रोत
सहायता के लिए धन्यवाद। यह इरादे के रूप में काम किया।
जोड़ा लेखक theGreenCabbage, स्रोत

वर्णित परिणाम प्राप्त करने के लिए, मुझे लगता है कि आप इसके प्रभाव के लिए कुछ चाहते हैं, प्रत्येक तत्व के बजाय प्रत्येक प्रत्येक उप-सरणी को पकड़ना, और inputArray [i] के साथ-साथ inputArray [inputArray) पर मान सेट करना याद रखना। लंबाई - i - 1]:

static double[,] flipArray(double[,] inputArray) {
    for (int i = 0; i < (inputArray.Length/2); i++) {
        double[] temp = inputArray[i];
        inputArray[i] = inputArray[inputArray.Length - i - 1];
        inputArray[inputArray.Length - i - 1] = temp;
    }
    return inputArray;
}
0
जोड़ा
एक दो आयामी सरणी सरणी की सरणी के समान नहीं है।
जोड़ा लेखक p.s.w.g, स्रोत