Java 我想把数字的第一位和最后一位相加
我想把数字的第一个和最后一个数字相加。在这里,我使用arraylist来获取任意数量的输入。就像我想输入31032045,因为一位数的数字应该是ommited,那么输出必须是4(103最后一个数字是3,第一个数字是1)和7(类似于2045)。我尝试了这个方法,但它没有终止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
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];