मैं जेनरेट किए गए सरणी को कैसे परिभाषित/संग्रहित करूं?

मेरा लक्ष्य दो क्रमबद्ध सरणियों से असामान्य तत्वों को मुद्रित करना है (दिए गए सरणी को उत्पन्न एक के साथ, लेकिन मुझे इसे परिभाषित/संग्रहीत करने की आवश्यकता है)।

if(arr[i]==unknown[?]){

यहाँ पूरा कोड है:

class Program  { 

public static void main (String[] args) { 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 
                  10, 11, 12, 13, 14, 15, 16 }; 
    int n = arr.length; 
    System.out.println("Sorted array is"); 
    System.out.println(Arrays.toString(arr)); 
    generateWorstCase(arr, 0, n - 1); 
    System.out.println("\nInput array that will result in \n"+ 
         "worst case of merge sort is \n"); 
    System.out.println(Arrays.toString(arr)); 
}
static void join(int arr[], int left[], int right[], int l, int m, int r)  { 
    int i; 
    for (i = 0; i <= m - l; i++) 
        arr[i] = left[i]; 
    for (int j = 0; j < r - m; j++) 
        arr[i + j] = right[j]; 
} 

static void split(int arr[], int left[], int right[], int l, int m, int r) { 
    for (int i = 0; i <= m - l; i++) 
        left[i] = arr[i * 2]; 
    for (int i = 0; i < r - m; i++) 
        right[i] = arr[i * 2 + 1]; 
} 

static void generateWorstCase(int arr[], int l, int r) { 
    if (l < r) { 
        int m = l + (r - l) / 2; 
        int[] left = new int[m - l + 1]; 
        int[] right = new int[r - m]; 
        split(arr, left, right, l, m, r); 
        generateWorstCase(left, l, m); 
        generateWorstCase(right, m + 1, r); 
        join(arr, left, right, l, m, r); 
    } 
} 

}

उदाहरण:

इनपुट:

{ 100 200 300 400 500 }

आउटपुट:

{ 100 500 300 200 400 }

आउटपुट के साथ इनपुट से असामान्य तत्वों को मुद्रित करने के लिए मैं क्या करूँगा। तो मैं जानना चाहता हूं कि जेनरेट किए गए सरणी को कैसे परिभाषित/संग्रहित किया जाए।

मैंने अलग-अलग तरीकों की कोशिश की, मैंने सोचा कि यह काम करेगा, लेकिन कोई भाग्य नहीं मिला।

int[] arr1 = Arrays.toString(arr);
1
Carsi 29 फरवरी 2020, 20:57
कहाँ के रूप में सहेजें? आपको एक क्रमबद्ध फॉर्म (जैसे JSON, CSV, आदि) पर सहमत होना होगा और इसे जारी रखने के लिए उपयोग करना होगा।
 – 
Dhrubajyoti Gogoi
29 फरवरी 2020, 21:01
@DhrubajyotiGogoi, मेरा मतलब जेनरेटेड सरणी को परिभाषित करना था, जैसा कि मैंने अपना इनपुट परिभाषित/घोषित किया था: int arr [] = ....
 – 
Carsi
29 फरवरी 2020, 21:04
आप चाहते हैं कि मूल सरणी से उत्पन्न सरणी generateWorstCase विधि में पैरामीटर के रूप में पारित हो?
 – 
dariosicily
29 फरवरी 2020, 21:15
Arrays.copyOf . का प्रयोग करें
 – 
Dhrubajyoti Gogoi
29 फरवरी 2020, 21:16
@dariosicily, हाँ, मैं यही चाहता हूँ, लेकिन मुख्य विधि में।
 – 
Carsi
29 फरवरी 2020, 21:27

2 जवाब

आप Arrays.copyOf और फिर कॉपी को अपनी विधि generateWorstCase में पास करें जो इसे संशोधित करेगी:

int arr[] = { 100, 200, 300, 400, 500 };
int n = arr.length;
int[] copy = Arrays.copyOf(arr, n);
generateWorstCase(copy, 0, n - 1); 
System.out.println(Arrays.toString(arr)); 
System.out.println(Arrays.toString(copy)); //will be printed [100, 500, 300, 200, 400]
0
dariosicily 29 फरवरी 2020, 21:35

आप अपने प्रोग्राम की शुरुआत में Arrays.copyOf, और फिर इस पुरानी प्रति की तुलना अपने संशोधित सरणी से करें (ध्यान दें कि नीचे दिया गया समाधान केवल इस मामले में काम करेगा, क्योंकि आपकी सरणी आदिम मूल्य):

   public static void main(String[] args) {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9,
            10, 11, 12, 13, 14, 15, 16};
    int[] copyOfArr = Arrays.copyOf(arr, arr.length);
    int n = arr.length;
    System.out.println("Sorted array is");
    System.out.println(Arrays.toString(arr));
    generateWorstCase(arr, 0, n - 1);
    // You can do comparison here
}
0
Petar Bivolarski 29 फरवरी 2020, 21:43
अरे धन्यवाद, लेकिन मैं जेनरेट किए गए एक को सहेजना चाहता हूं, जैसे एआर [] के साथ किया गया था, मैं दो सरणी (इनपुट और आउटपुट) से असामान्य तत्वों को प्रिंट करना चाहता हूं।
 – 
Carsi
29 फरवरी 2020, 21:31
हैलो, एआर [] आपका वास्तविक जेनरेट किया गया है, जिसे आप अंत में प्रिंट भी कर रहे हैं। इसका कारण यह है कि सरणी अपने मूल्यों के लिए "संदर्भ" रखती है, और आप इस संदर्भ को विधियों में पास कर रहे हैं, और फिर आप अपने स्वयं के मूल्यों को प्रिंट कर रहे हैं (मान बदलते हैं, लेकिन संदर्भ वही है)। तो आपकी जेनरेट की गई सरणी वास्तव में एआर [] (आउटपुट) है और आपकी इनपुट सरणी copyOfArr [] है।
 – 
Petar Bivolarski
29 फरवरी 2020, 21:39
आह, मैं इसे अब बेहतर समझता हूं, जब आप इसे बताते हैं, धन्यवाद :)
 – 
Carsi
1 मार्च 2020, 00:12