Ilk ikkita birlashtirilgan uzunlikka ega bo'lgan uchinchi qatorda ikkita qatorni kiritish

Men nima qilishim kerak bo'lsa, birinchi ikkitaning uzunligini birlashtirgan uchinchi dinamik qatorni (menimcha deb o'ylayman) yaratib, so'ngra o'sha qatorlarning mazmunini uchinchi qatorning chiqishi sifatida chiqaradi.

Misol:

Array 1: 1 4 2 6 0

2-qator: 3 6 2 1 5

Array 3: 1 4 2 6 0 3 6 2 1 5

Men hozirga qadar shunday deb o'ylayman:

import javax.swing.*;

public class DynamicArray
{
    public static void main(String[] args)
    {
       //User Input - Array length
        int arrayLength;
        arrayLength = Integer.parseInt(JOptionPane.showInputDialog("Enter Array length:"));

       //First dynamic array
        int[] dynArray1;
        dynArray1 = new int[arrayLength];

        for (int i = 0; i < dynArray1.length; i++)
        {
            dynArray1[i] = (int) (Math.random() * 10);
        }

        System.out.println("First Array:");

        for (int j = 0; j < dynArray1.length; j++)
        {
            System.out.println(dynArray1[j]);
        }

       //Second dynamic array
        int[] dynArray2;
        dynArray2 = new int[arrayLength];

        for (int i = 0; i < dynArray2.length; i++)
        {
            dynArray2[i] = (int) (Math.random() * 10);
        }

        System.out.println("Second Array:");

        for (int j = 0; j < dynArray2.length; j++)
        {
            System.out.println(dynArray2[j]);
        }

       //Third dynamic array
        int thirdArrayLength = dynArray1.length + dynArray2.length;
        int[] dynArray3;
        dynArray3 = new int[thirdArrayLength];

        for (int i = 0; i < dynArray3.length; i++)
        {

        }
    }
}

Men faqatgina birinchi va ikkinchi nashrlarni chop qilardim, lekin o'ylaymanki, bu yolg'ondir va mening topshirig'im so'ramaydi. Ichki Array1 va Array2 uchun harakat qilaman va natijalarni chop qilaman. Men bu haqda qanday qilib borishim kerakligini aniq bilmayman. Har qanday yordamni qadrlash kerak.

EDIT: Bu hal qilindi! Quyida kod:

    /* Third dynamic array */
    int thirdArrayLength = dynArray1.length + dynArray2.length;
    int[] dynArray3;
    dynArray3 = new int[thirdArrayLength];

    for (int i=0; i < dynArray1.length; i++) {
        dynArray3[i] = dynArray1[i];
    }
    for (int i=0; i < dynArray2.length; ++i) {
        dynArray3[i + dynArray1.length] = dynArray2[i];
    }

    System.out.println("Third Array:");

    for (int i=0; i < dynArray3.length; ++i) {
        System.out.println(dynArray3[i]);
    }
1
int uzunligi va uzunligi = 5 o'rniga, int uzunligi = 5; bir ifodada o'zgaruvchini ishga tushirishingiz va belgilashingiz mumkin.
qo'shib qo'ydi muallif mike, manba
Menimcha, bu topshiriq va siz uchun dizayni birlashtiradigan yuqori darajadagi funktsiyalardan foydalanishga ruxsat berilmaydi.
qo'shib qo'ydi muallif mike, manba
@ McNasty49, hozirgi kunga qadar sizga yordam berganmi?
qo'shib qo'ydi muallif mike, manba
Siz asl xabarni tahrir qilishingiz mumkin;)
qo'shib qo'ydi muallif Stefano Zanini, manba
Buni asl xabarga qo'shib qo'yishim kerak edi, qator uzunligi foydalanuvchi kiritgan raqamlar bo'lishi kerak.
qo'shib qo'ydi muallif McNasty49, manba

6 javoblar

Agar Java-8-dan foydalanayotgan bo'lsangiz, siz < kodi> Array va System.arraycopy :

//your array
int array1[] = {1, 4, 2, 6, 0};
int array2[] = {3, 6, 2, 1, 5};

//create a new array witch have length array1.length + array2.length
int array3[] = new int[array1.length + array2.length];

//copy the first array1 in array3
System.arraycopy(array1, 0, array3, 0, array1.length);
//copy the second array2 in array3
System.arraycopy(array2, 0, array3, array1.length, array2.length);

//display your arrays
System.out.println("Array 1:" + Arrays.toString(array1));
System.out.println("Array 2:" + Arrays.toString(array2));
System.out.println("Array 3:" + Arrays.toString(array3));

Chiqish

Array 1:[1, 4, 2, 6, 0]
Array 2:[3, 6, 2, 1, 5]
Array 3:[1, 4, 2, 6, 0, 3, 6, 2, 1, 5]
1
qo'shib qo'ydi
Qiziqarli javob! Hozirgacha System.arraycopy dan foydalanmadingiz.
qo'shib qo'ydi muallif mike, manba

Ikki (+1) imkoniyat bor.

Nishon qatordan pastga

Uchinchi qatorni bir marta (hozirgi paytda) o'tkazishingiz mumkin va agar siz birinchi yoki ikkinchi qatorga kirishingiz kerakligini aniqlashga yordam beradigan bo'lsa, foydalaning.

if (i > array1.length) {
    array3[i] = array2[i - array1.length];
else
    array3[i] = array1[i];
}

Ikkala manba qatorlari bo'ylab aylantiring

Yoki siz birinchi va ikkinchi qatorga aylanadigan va o'z qadriyatlarini uchinchisiga belgilaydigan ikkita maxsus loopdan foydalanishingiz mumkin. array2 ustidan yineluvchi ikkinchi tsikli, uchinchi qatorni indekslash uchun ofsetdan foydalanish kerak.

    array3[i +  array1.length] = array2[i];

Java8 Stream API

java.util.Arrays.stream (int []] bilan yaratishingiz mumkin bo'lgan ikkita oqimni birlashtirish uchun IntStream ichida IntStream concat (IntStream a, IntStream b) ) .

0
qo'shib qo'ydi

Java 8 ning stream dan foydalanishingiz mumkin, masalan, ikkita massivni ketma-ket iteratsiya qilish mumkin, masalan:

public static void main(String[] args) throws Exception{
    int[] array1 = {1,2,4}, array2 = {4,5,6};
    Stream.of(array1, array2)
    .flatMapToInt(s -> Arrays.stream(s))
    .forEach(System.out::println);
}

yangilash

Ikkita qatorni birlashtirish/concat qilish zarur bo'lsa, ushbu oqimda ro'yxat yaratish uchun Koleksiyoncu qo'shasiz, masalan:

public static void main(String[] args) throws Exception{
    int[] array1 = {1,2,4}, array2 = {4,5,6};
    List list = Stream.of(array1, array2)
    .flatMapToInt(s -> Arrays.stream(s))
    .boxed()
    .collect(Collectors.toList());
}

Bu sizga integer ro'yxatini berishi mumkin, uni quyidagi tarzda int [] qatoriga aylantira olasiz:

int[] array = new int[list.size()];
for(int i=0 ; i
0
qo'shib qo'ydi
Bu javob o'z vazifasini hal qilish va muammoni tushunishga yordam bermaydi.
qo'shib qo'ydi muallif mike, manba
@mike ko'rsatganingiz uchun tashakkur. O'z vazifasini bajarishga yordam beradigan javobga yana bir misol qo'shdim.
qo'shib qo'ydi muallif Darshan Mehta, manba

Bitta variant faqatgina dastlabki ikki qatorda yinelemek va uchinchi qatorni to'ldirishdir:

for (int i=0; i < dynArray1.length; i++) {
    dynArray3[i] = dynArray1[i];
}
for (int i=0; i < dynArray2.length; ++i) {
    dynArray3[i + dynArray1.length] = dynArray2[i];
}

// then print out the third array
for (int i=0; i < dynArray3.length; ++i) {
    System.out.println(dynArray3[i]);
}
0
qo'shib qo'ydi
Uzoq vaqt davomida javob berish uchun kechirim so'rayman; Bu menga kerak bo'lgan narsadir!
qo'shib qo'ydi muallif McNasty49, manba

Uchinchi qatorni foydalanuvchi birinchi ikkita qator uzunligi kiritilgandan so'ng tarkibini chop qiladigan kodlash uchun ikkita da, siz ham uchinchi qatorni to'ldirishingiz mumkin.

Bu holatda siz noldan boshlanadigan, lekin uchinchi qatorning bir qismi allaqachon to'ldirilganligi sababli ortishi kerak bo'lgan ikkinchi uchun hisoblagichiga e'tibor berishingiz kerak bo'ladi.

Yana aytmayman, chunki u sizning uy vazifasini aytgan va sizni aldashni xohlamagan :)

0
qo'shib qo'ydi

Buning uchun yaxshi Apache Commons kutubxonasi usuli mavjud: http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/ lang3/ArrayUtils.html # addAll% 28T% 5B% 5D,% 20T ...% 29

int[] dynArray3 = (int[])ArrayUtils.addAll(dynArray1, dynArray2);

for(int i : dynArray3) {
    System.out.println(i);
}
0
qo'shib qo'ydi