Java 我想把数字的第一位和最后一位相加

Java 我想把数字的第一位和最后一位相加,java,Java,我想把数字的第一个和最后一个数字相加。在这里,我使用arraylist来获取任意数量的输入。就像我想输入31032045,因为一位数的数字应该是ommited,那么输出必须是4(103最后一个数字是3,第一个数字是1)和7(类似于2045)。我尝试了这个方法,但它没有终止 import java.util.*; public class add { public static void main(String[] args){ Scanner scan = new Sca

我想把数字的第一个和最后一个数字相加。在这里,我使用arraylist来获取任意数量的输入。就像我想输入31032045,因为一位数的数字应该是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);
   }
  }
} 
import java.util.*;
公共类添加{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
ArrayList=新建ArrayList();
while(scan.hasNextInt()){
添加(scan.nextInt());
}
整数[]num=list.toArray(新整数[0]);
对于(int i=0;i=10)
{
温度=num[i]%10;
while(num[i]>1)
{
num[i]=num[i]%10;
}   
温度=数量[i]+温度;
}
系统输出打印项次(“+temp”);
}
}
} 

提取将计算数字和的方法(如果值小于10):

私有静态可选数字(整数){
如果(number9){//减少数字以获得第一个数字
数字=数字/10;
}
返回可选。of(数字+最后一位数字);
}
最后,您可以将数字转换为字符串,只需选择数字。但这在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)));

  }
} 
import java.util.*;
公共类数字图书馆{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
列表=新的ArrayList();
while(scan.hasNextInt()){
sumdights(scan.nextInt()).ifPresent(list::add);
}
}
专用静态可选数字(整数){

如果(数字你能…分割字符串吗

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,可能?)错误,或者如果您传递的是除数字和“,”之外的其他内容,则会出现错误。

代码未终止的原因是以下无限循环:

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];

31032045那么输出必须是4和7。我为什么要尝试编写一个单独的方法,该方法采用
int
并将其分解为单独的十进制数字,作为
int
的数组。然后添加第一个非零数字和最后一个数字。
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];