我想添加数字的第一位和最后一位。这里我使用了arraylist来获取任意数量的输入。就像我想输入3,103,2045的单位数字应该是ommited,然后输出必须是4( 103最后一个数字是3,第一个数字是1)和7(类似于2045)。我试过这个,但它没有终止。
import java.util.*;
public class add {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
ArrayList<Integer> list = new ArrayList<Integer>();
while(scan.hasNextInt()){
list.add(scan.nextInt());
}
Integer [] num = list.toArray(new Integer[0]);
for(int i=0;i<num.length;i++)
{
int temp=0;
while(num[i]>=10)
{
temp=num[i]%10;
while(num[i]>1)
{
num[i]=num[i]%10;
}
temp=num[i]+temp;
}
System.out.println(""+temp);
}
}
}
答案 0 :(得分:1)
您的代码未终止的原因是以下无限循环:
while (num[i]>1) {
num[i]=num[i]%10;
}
该循环的第一次迭代将在num[i]
中分配一个位数。第二次迭代和任何其他迭代不会改变num[i]
的值,因为将单个数字除以10的余数是相同的单个数字。你可能想要进行分工 - num[i]=num[i]/10;
正确的逻辑(对于单个输入)应如下所示:
int lastDigit=num[i] % 10; // the last (least significant digit) is easy to find
if (num[i] > lastDigit) { // only numbers with multiple digits will be handled
while(num[i] >= 10) { // loop until you find the first (most significant) digit
num[i] = num[i] / 10;
}
}
int sum = lastDigit + num[i];
答案 1 :(得分:0)
提取将计算数字总和的方法(如果值小于10):
private static Optional<Integer> sumDigits(Integer number){
if(number<10) {return Optional.empty();} // single digit number
int lastDigit = number%10; // compute last digit
while(number>9){ // reduce number to get first digt
number = number/10;
}
return Optional.of(number + lastDigit);
}
最终,您可以将数字转换为字符串,然后只需选择数字。但这在java中的效率要低得多。
import java.util.*;
public class DigitSum {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
while(scan.hasNextInt()){
sumDigits(scan.nextInt()).ifPresent(list::add);
}
}
private static Optional<Integer> sumDigits(Integer number){
if(number<10) {retrun Optional.empty();} // single digit number
String numberAsString = number.toString();
return Optional.of(Integer.parse(numberAsString.charAt(0)) +
Integer.parse(numberAsString.charAt(numberAsString.length-1)));
}
}
或者以模数(更快)的方式使用你的方法:
答案 2 :(得分:0)
String input = "3,103,2047";
String [] strs = input.split(",");
for(String str : strs){
System.out.println(Integer.parse(str.charAt(0)) + Integer.parse(str.charAt(str.length -1)));
}
你需要一些数据检查,所以它不会抛出ArrayIndexOutOfBoundsException(如果str.length == 1,可能是?)错误,或者如果你传递的数字和','
之外的错误