第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

通過對(duì)角線遍歷具有左傾對(duì)角線部分的二維數(shù)組來獲取數(shù)組列表?

通過對(duì)角線遍歷具有左傾對(duì)角線部分的二維數(shù)組來獲取數(shù)組列表?

桃花長相依 2022-06-23 17:42:41
我知道我可以使用for (int i = 0; i < myArray.length; i++)或增強(qiáng)的 for 循環(huán)來完全遍歷循環(huán)。但是,我試圖通過在矩形二維數(shù)組中完全對(duì)角迭代來創(chuàng)建新的 char[] 數(shù)組,同時(shí)采用左傾部分(而不是通常的右傾部分)。換句話說,請(qǐng)看下圖。我希望每個(gè) char[] 數(shù)組都由下圖中兩條紅色對(duì)角線之間的所有字符組成。因此,如果迭代從右上角開始,則創(chuàng)建的第一個(gè)數(shù)組將是 , ['q'],第二個(gè)將是['e', 'w'],第三個(gè),['d', 'j', 'e']依此類推。這是圖表代碼:private static char[][] bigArray = {        {'a', 'b', 'c', 'd', 'e', 'q'},        {'f', 'g', 'h', 'i', 'j', 'w'},        {'k', 'l', 'm', 'n', 'o', 'e'},        {'p', 'q', 'r', 's', 't', 'r'},        {'u', 'v', 'w', 'x', 'z', 't'}};嘗試迭代左傾對(duì)角線使得很難始終知道我正在使用的數(shù)組的長度。特別是因?yàn)槲覄?chuàng)建的新 char[] 數(shù)組的長度不同。有沒有一種方法可以告訴 java 停止為我創(chuàng)建的每個(gè)數(shù)組以特定長度迭代?
查看完整描述

1 回答

?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

嘗試迭代左傾對(duì)角線使得很難始終知道我正在使用的數(shù)組的長度。特別是因?yàn)槲覄?chuàng)建的新 char[] 數(shù)組的長度不同。


要根據(jù)您在矩陣中的當(dāng)前位置(使用索引和)計(jì)算對(duì)角線的長度(新的大?。?,請(qǐng)執(zhí)行此操作char[]bigArrayij


int newCharArrayLength = Math.min(height - i, width - j);

實(shí)施(以下解釋)

private static List<char[]> getDiagonalsList(char[][] arr) {

    List<char[]> ans = new ArrayList<>();

    int height = arr.length;

    int width = arr[0].length;

    int numberOfDiagonals = arr.length + arr[0].length - 1;


    for (int diagonalIdx = 0; diagonalIdx < numberOfDiagonals; diagonalIdx++) {

        int i = Math.max(diagonalIdx - width + 1, 0);

        int j = Math.max(width - diagonalIdx - 1, 0);

        int currentDiagonalLength = Math.min(height - i, width - j);

        int idx = 0;


        char[] charArr = new char[currentDiagonalLength];

        while (i < height && j < width)

            charArr[idx++] = arr[i++][j++];


        ans.add(charArr);

    }


    return ans;

}

一個(gè)main函數(shù)

您可以編寫這樣的main函數(shù)來輸出結(jié)果


public static void main(String[] args) {

    char[][] arr = {

            {'a', 'b', 'c', 'd', 'e', 'q'},

            {'f', 'g', 'h', 'i', 'j', 'w'},

            {'k', 'l', 'm', 'n', 'o', 'e'},

            {'p', 'q', 'r', 's', 't', 'r'},

            {'u', 'v', 'w', 'x', 'z', 't'}};


    for (char[] diag : diagonal(arr))

        System.out.println(diag);

}

輸出

結(jié)果將如下所示


q

ew

dje

cior

bhntt

agmsz

flrx

kqw

pv

u

解釋和算法

  1. 初始化一個(gè)Listchar[]這是您在每次迭代中放置對(duì)角線的地方

  2. 計(jì)算numberOfDiagonals矩形的總數(shù)。您可以通過將寬度和高度相加減一(重復(fù)角)來做到這一點(diǎn)

  3. 計(jì)算你的i指數(shù)。這可以通過從對(duì)角線索引減去 1 減去矩形的寬度來完成(因?yàn)槲覀儚?0 開始索引)。該指數(shù)應(yīng)始終為正

  4. 計(jì)算你的j指數(shù)。與以前的原理相同,但您反轉(zhuǎn)減法,因?yàn)槲覀冃枰聪驅(qū)蔷€。這也需要積極

  5. 計(jì)算你的currentDiagonalLength. 要做到這一點(diǎn)更小,當(dāng)前行和高度或當(dāng)前列和寬度之間的距離(i)(j)

  6. 初始化一個(gè)數(shù)組,該數(shù)組將使用先前計(jì)算的長度保存您的對(duì)角線

  7. 一項(xiàng)一項(xiàng)地添加項(xiàng)目。在每次迭代中增加當(dāng)前行i當(dāng)前列j

  8. 將該數(shù)組附加到步驟 1中提到的列表中

  9. 重復(fù)步驟 3步驟 8,直到完成所有對(duì)角線


查看完整回答
反對(duì) 回復(fù) 2022-06-23
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)