我一直在尝试将JavaScript函数转换为Java方法,其中一个数字通过参数传递,如果两个并发数字甚至是一个破折号" - "会放在他们之间。
只要最后一个数字不均匀,这个工作正常,如果它甚至我得到一个越界错误,我假设是使用arr2.get(i + 1)
的第一个if语句条件的一部分是true
但是由于到达列表的末尾而无法满足第二个条件。有没有一种简单的方法来纠正这里的逻辑?
我对Java很陌生,并且遇到了一些我可以在JavaScript中轻松解决的问题,因为一些数据结构的行为方式不同。
public void dash(int someNumber) {
int num = someNumber;
String str = String.valueOf(num);
String arr1[] = str.split("");
String result = "";
ArrayList<Integer> arr2 = new ArrayList<Integer>();
for (int i = 0; i < arr1.length; i++) {
int temp = Integer.parseInt(arr1[i]);
arr2.add(temp);
}
for(int i = 0; i < arr2.size(); i++) {
if (arr2.get(i) % 2 == 0 && arr2.get(i + 1) % 2 == 0) {
result = result + arr2.get(i) + "-";
}
else{
result = result + arr2.get(i);
}
}
System.out.println(result);
}
}
main
。
public class mainController {
public static void main(String[] args) {
DashSort ds = new DashSort();
ds.dash(245461);
}
}
如果对此进行了修改,并且似乎工作正常。
if (i + 1 == arr2.size()) {
result = result + arr2.get(i);
}
else if (arr2.get(i) % 2 == 0 && i < arr2.size() && arr2.get(i + 1) % 2 ==0) {
result = result + arr2.get(i) + "-";
}
else{
result = result + arr2.get(i);
}
答案 0 :(得分:4)
将其更改为:
for(int i = 0; i < arr2.size()-1; i++) {
或者如果i+1
i ==arr2.size()
答案 1 :(得分:0)
如果您只使用输出字符串并使用整数逐位数字工作,则不必String.valueOf(num)
,str.split("")
或Integer.parseInt(arr1[i])
:
public static void dash(int someNumber) {
int lastDigit = 1;
StringBuilder sb = new StringBuilder();
while (someNumber > 0)
{
int currentDigit = someNumber % 10;
someNumber /= 10;
if (lastDigit % 2==0 && currentDigit % 2==0)
sb.append('-');
sb.append(currentDigit);
lastDigit = currentDigit;
}
String result = sb.reverse().toString(); //reverse because we processed the digits in reverse order
System.out.println(result);
}