簡體   English   中英

反轉int數組的所有三個數字元素

[英]Reverse all three digit elements of an int array

因此,我嘗試采用一個int數組並反轉具有三位以上數字的每個元素。 即更改147-> 741

我是java的新手,甚至都不知道從哪里開始。

這是我正在嘗試使用的數組。

int codedMessage[] = {334, 384, 105, 222, 61, 2, 175, 228, 114, 235, 241, 
                      213, 206, 3, 321, 152, 214, 137, 224};

任何幫助是極大的贊賞! 每當我嘗試尋求幫助時,我都會找到一些關於反轉數組順序的信息,因為我真的不知道如何正確地搜索我的問題。

您可以遍歷數組codedMessage並檢查該值是否具有3個或更多數字(即大於99)。 如果是這樣,則將其轉換為String ,將其反轉,然后將其寫回到適當的位置。

int codedMessage[] = {334, 384, 105, 222, 61, 2, 175, 228, 114, 235, 241, 
                      213, 206, 3, 321, 152, 214, 137, 224};

for (int i=0; i < codedMessage.length; ++i) {
    if (codedMessage[i] > 99) {
        String value = String.valueOf(codedMessage[i]);
        String valueReversed = new StringBuilder(value).reverse().toString();
        codedMessage[i] = Integer.parseInt(valueReversed);
    }
}

System.out.print("{");
for (int i=0; i < codedMessage.length; ++i) {
    if (i > 0) { System.out.print(", "); }
    System.out.print(codedMessage[i]);
}
System.out.print("}");

輸出:

{433, 483, 501, 222, 61, 2, 571, 822, 411, 532, 142, 312, 602, 3, 123, 251, 412, 731, 422}

試試這個(最后打印的codedMessage [i]將包含相反的數字。我使用過main(),但可以調用一個函數):

public static void main(String[] args) {
    int[] codedMessage = {123,456, 789};
    int temp = 0;
    for(int i=0; i<codedMessage.length;i++){
        temp = 0;
        if(codedMessage[i]/100>=1){
            while(codedMessage[i]>0){
                temp = temp*10 + codedMessage[i] %10;
                codedMessage[i] = codedMessage[i]/10;                   
            }
            codedMessage[i] = temp;
            System.out.println(codedMessage[i]);
        }
    }

}

其他方法使用字符串,與僅執行整數運算相比,它相當慢:

public int reverseNumber(int number){

    int reverse = 0;
    while(number != 0){
        reverse = (reverse*10)+(number%10);
        number = number/10;
    }
    return reverse;
}

然后遍歷數組

for(int code : codedMessage){
    System.out.print(reverseNumber(code))
}

用戶練習如何只反轉大於99的數字。

反轉號碼的來源

首先,您需要將問題分解為較小的步驟。 嘗試反向工作,看看是否可以弄清楚如何完成這些封裝的步驟。

  1. 反轉元素的數字。
  2. 檢查元素是否具有三個或更多數字。
  3. 遍歷數組並檢查每個元素。

祝好運!

我將為您提供一些一般性幫助,因為我認為這是最好的學習方法。

首先,像這樣遍歷數組中的所有元素:

for (int number : codedMessage) {
    if (number > 99)
        continue;
    //Here you want to handle three digit numbers.
}

現在,我們來看看如何反轉數字。 我建議你使用將數字轉換為字符串Integer.toString和反向字符串,並將其轉換回使用了許多Integer.parseInt 我將向您展示如何反轉字符串。

StringBuilder builder = new StringBuilder(str) //str is the string you want to reverse
builder.reverse();
String revresed = builder.toString();

現在reversed是反向字符串,您可以通過其名稱來辨別。 因此,現在輪到您結合以上內容並創建您自己的精彩程序了!

可能是這樣的:

for(int i = 0; i < codedMessage.length ; i++)
   if (codedMessage[i]>99)
        codedMessage[i] = Integer.parseInt(new StringBuilder(new String (codedMessage[i]+"")).reverse().toString());

在下面的代碼中,我創建了一個反向函數,如果長度為3或更大,則將數字反向並返回整數值。

    package com;
    public class Reverse {
    public static void main(String args[])
    {
        int codedMessage[] = {334, 384, 105, 222, 61, 2, 175, 228, 114, 235, 241, 
                  213, 206, 3, 321, 152, 214, 137, 224};
        String num;
    int message[]=new int[codedMessage.length];
    for(int i=0; i<codedMessage.length; i++)
    {           
        num=codedMessage[i]+"";
        if(num.length()>=3)
        {
            message[i]=reverse(num);
            System.out.println("Reverse="+message[i]);
        }
        else
        {
            message[i]=codedMessage[i];
            System.out.println(message[i]);
        }        
    }
}
    public static int reverse(String num) 
    {
        int number;
        number=Integer.parseInt(""+(new StringBuffer(num).reverse()));        
        return number;
    }
}

如大多數其他答案所述,最簡單的方法是使用StringBuilder.reverse() 已對以下內容進行優化,以最大程度地減少分配給1個StringBuilder (全局),每個反向編號再加上1個String

int codedMessage[] = {334, 384, 105, 222, 61, 2, 175, 228, 114, 235, 241, 
                      213, 206, 3, 321, 152, 214, 137, 224, 123456789};

// Reverse digits of all numbers with 3 or more digits
StringBuilder buf = new StringBuilder();
for (int i = 0; i < codedMessage.length; i++)
    if (codedMessage[i] > 99) {
        buf.setLength(0);
        codedMessage[i] = Integer.parseInt(buf.append(codedMessage[i]).reverse().toString());
    }

// Print result
System.out.println(Arrays.toString(codedMessage));

添加了數字123456789以顯示超過3個數字的反轉:

[433, 483, 501, 222, 61, 2, 571, 822, 411, 532, 142, 312, 602, 3, 123, 251, 412, 731, 422, 987654321]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM