反转int数组的所有三位数元素

时间:2015-09-07 05:08:32

标签: java arrays for-loop int reverse

所以我试图获取一个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};

非常感谢任何帮助!每次我尝试寻求帮助时,我只是找到了扭转数组顺序的东西,因为我真的不知道如何正确地谷歌我的问题。

8 个答案:

答案 0 :(得分:3)

您可以遍历数组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}

答案 1 :(得分:2)

试试这个(在末尾打印的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]);
        }
    }

}

答案 2 :(得分:2)

其他方法使用字符串,与仅执行整数操作相比,它们相当慢:

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的数字作为练习留给用户。

Source for reversing a number

答案 3 :(得分:1)

首先,您需要将问题分解为更小的步骤。尝试向后工作,看看你是否可以弄清楚如何进行这些封装步骤。

  1. 反转元素的数字。
  2. 检查元素是否包含三位或更多位数。
  3. 遍历数组并检查每个元素。
  4. 祝你好运!

答案 4 :(得分:0)

我会给你一些一般的帮助,因为这是我认为最好的学习方法。

首先,循环遍历数组中的所有元素:

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是反向字符串,您可以通过其名称来判断。所以现在轮到你把上面的内容结合起来创建你的精彩节目了!

答案 5 :(得分:0)

可能是这样的:

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

答案 6 :(得分:0)

在下面的代码中,我创建了一个反向函数,如果长度为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;
    }
}

答案 7 :(得分:0)

正如大多数其他答案所涵盖的那样,最简单的方法是使用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]