反转 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};
非常感谢任何帮助!每次我尝试寻求帮助时,我只是找到关于反转数组顺序的东西,因为我真的不知道如何正确地 google 我猜我的问题。
您可以遍历数组 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}
首先,您需要将问题分解成更小的步骤。尝试逆向工作,看看您是否可以弄清楚如何执行这些封装的步骤。
- 反转元素的数字。
- 检查一个元素是否有三位数或更多位数。
- 遍历数组并检查每个元素。
祝你好运!
我只会给你一些一般性的帮助,因为在我看来这是最好的学习方式。
首先,像这样遍历数组中的所有元素:
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());
试试这个(最后打印的 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 的数字留给用户作为练习。
在下面的代码中,我创建了一个反向函数,如果它的长度是 3 或更多并且 returns 是整数值,它会反转数字。
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]
所以我试图获取一个 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};
非常感谢任何帮助!每次我尝试寻求帮助时,我只是找到关于反转数组顺序的东西,因为我真的不知道如何正确地 google 我猜我的问题。
您可以遍历数组 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}
首先,您需要将问题分解成更小的步骤。尝试逆向工作,看看您是否可以弄清楚如何执行这些封装的步骤。
- 反转元素的数字。
- 检查一个元素是否有三位数或更多位数。
- 遍历数组并检查每个元素。
祝你好运!
我只会给你一些一般性的帮助,因为在我看来这是最好的学习方式。
首先,像这样遍历数组中的所有元素:
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());
试试这个(最后打印的 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 的数字留给用户作为练习。
在下面的代码中,我创建了一个反向函数,如果它的长度是 3 或更多并且 returns 是整数值,它会反转数字。
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]