亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法用其他數組初始化二維數組?

有沒有辦法用其他數組初始化二維數組?

慕斯王 2024-01-28 20:27:14
我被布置了如下家庭作業:從控制臺應用程序中讀取三個句子。每句話不應超過80個字符。然后,將每個輸入句子中的每個字符復制到 [3 x 80] 字符數組中。第一個句子應以字符相反的順序加載到第一行 - 例如,“mary had a little羔羊”應作為“bmal elttil a dah yram”加載到數組中。第二句話應該以單詞相反的順序加載到第二行中 - 例如,“mary had a littlelamb”應該加載到數組中,如“lamb little a had mary”。第三句應該加載到第三行,如果數組的索引可以被 5 整除,則相應的字符將被字母“z”替換 - 例如,“mary had a littlelamb”應該加載到數組為“mary zad azlittze lazb”——也就是說,索引位置 5、10、15 和 20 中的字符被“z”替換。請注意,空格也是一個字符,并且索引從位置 0 開始。現在在控制臺上打印字符數組的內容。下面代碼中的方法、返回類型和參數都是根據需要指定的,因此我無法更改任何這些信息。我在初始化二維數組時遇到問題。指令說句子必須加載到已經顛倒的數組中等,但是執行此操作的方法的參數需要字符串。我認為這意味著我應該將這些行作為字符串讀取,然后調用方法來修改它們,然后使用 toCharyArray 來轉換它們,然后再將它們加載到二維數組中。我不明白如何使用 char 數組的值初始化 2D 數組。我可以使用某種 for 循環嗎?另一個問題是,在主方法內部無法進行任何處理,但在說明中沒有我可以調用來填充數組的方法。
查看完整描述

1 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

問題是,在您的printChar2DArray方法中,您假設每個數組的長度為 80,但實際上并非如此。在 Java 中,二維數組只是數組的數組。因此,當你有這個:時char[][] arr = new char[3][80],你正在創建一個由 3 個數組組成的數組,每個數組的長度都是 80 個字符。這看起來似乎沒問題,但在接下來的幾行中,您將使用完全不同的內容重新初始化 3 個數組。


arr[0] = reverseByCharacter(sentence1).toCharArray();

arr[1] = reverseByWord(sentence2).toCharArray();

arr[2] = change5thPosition(sentence3).toCharArray();

現在這些數組的長度都不為 80。每個數組都有各自字符串的長度。


您可以通過兩種方式解決這個問題(取決于您的任務實際受到的限制程度)。


首先,您可以將字符串復制到數組中,而不是將數組分配給方法的結果toCharArray。您可以通過一個簡單的循環來實現此目的,但我不推薦這種方法,因為您最終會得到 80 個字符的數組,即使字符串包含的字符更少。


String firstSentence = reverseByCharacter(sentence1);

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

    arr[0][i] = firstSentence.charAt(i);

}

或者:


char[] firstSentence = reverseByCharacter(sentence1).toCharArray();

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

    arr[0][i] = firstSentence[i];

}

其次,您可以在方法中放棄對數組長度的假設printChar2DArray。我推薦這種方法,因為它使您的代碼更加靈活。然后你的printChar2DArray方法將如下所示:


public static String printChar2DArray(char[][] arr){

    for (int x = 0; x < arr.length; x++) {

        for (int y = 0; y < arr[x].length; y++) {

            // just a print so it does not make new lines for every char

            System.out.print(arr[x][y]);

        }

    }

    return null;

}

您可以看到我已經用length字段替換了數字,任何數組都可以訪問該字段。


另外,這樣您就不需要初始化內部數組,因為無論如何您都會在下一行中重新初始化它們。


char[][] arr = new char[3][];

arr[0] = reverseByCharacter(sentence1).toCharArray();

arr[1] = reverseByWord(sentence2).toCharArray();

arr[2] = change5thPosition(sentence3).toCharArray();

但這種方法可能不適合您的任務,因為這樣句子可以是任意長度,并且它們不會最多限制為 80 個字符。


更新- 回答評論中的問題


要打印換行符,您可以System.out.println()不帶參數使用。這比將換行符放入數組中更好,因為它不是句子的邏輯部分。


所以你的for循環printChar2DArray看起來像這樣:


for (int x = 0; x < 3; x++) {

    for (int y = 0; y < 80; y++) {

        // just a print so it does not make new lines for every char

        System.out.print(arr[x][y]);

    }

    System.out.println();

}


查看完整回答
反對 回復 2024-01-28
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號