我想添加数字的第一位和最后一位

时间:2018-05-22 17:47:34

标签: java

我想添加数字的第一位和最后一位。这里我使用了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);
   }
  }
} 

3 个答案:

答案 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,可能是?)错误,或者如果你传递的数字和','

之外的错误