Java 如何使用数组列表元素进行计算。?
我有一个整数数组列表。它将始终包含5个整数。现在假设它包含数字10031。现在我想在元素中进行计算 将数字添加到此数字中,直到剩下1或2位数字 1….0….0….3….1 …1…0…3…4 …1…3…7 …4…10(发生这种情况时,分为1+0) …5..1=51。结果是51Java 如何使用数组列表元素进行计算。?,java,android,arraylist,integer,Java,Android,Arraylist,Integer,我有一个整数数组列表。它将始终包含5个整数。现在假设它包含数字10031。现在我想在元素中进行计算 将数字添加到此数字中,直到剩下1或2位数字 1….0….0….3….1 …1…0…3…4 …1…3…7 …4…10(发生这种情况时,分为1+0) …5..1=51。结果是51 我想要两位数的结果。请帮忙。我认为如果你自己解决这项任务会更好,但这是你的选择。 评论中的所有解释 public static int countTriangle(List<Integer> list) {
我想要两位数的结果。请帮忙。我认为如果你自己解决这项任务会更好,但这是你的选择。 评论中的所有解释
public static int countTriangle(List<Integer> list) {
if (list.size() == 0) {
// if list is empty return 0
return 0;
} else if (list.size() == 1) {
// if list contains only single element return this element
return list.get(0);
} else if (list.size() == 2) {
// if list contains two elements, return them connected
// for example we have list of 5 and 1
// we multiple 5 with 10 (50) and then add 1 to it,
// so the output of 5 and 1 will be 51
return list.get(0) * 10 + list.get(1);
}
// create new list for the next triangle's line
List<Integer> newList = new ArrayList<Integer>();
// iterate over every element of existing list
for (int i = 0; i < list.size() - 1; i++) {
// a = current element + next element (last iteration will be with last but one element)
int a = list.get(i) + list.get(i+1);
// if a has two digits or more
if (a >= 10) {
// translate it to String
String s = String.valueOf(a);
// take every char of a String, translate it to number and add to new list
// for example if a = 157 then three new elements will be added to new list (1, 5, 7)
for (int j = 0; j < s.length(); j++) {
newList.add(Integer.valueOf(String.valueOf(s.charAt(j))));
}
// if a has single digit
} else {
// add this to new list
newList.add(a);
}
}
// call this function with new list (next line)
return countTriangle(newList);
}
public static int countTriangle(列表){
if(list.size()==0){
//如果列表为空,则返回0
返回0;
}else if(list.size()==1){
//如果列表仅包含单个元素,则返回此元素
返回列表。获取(0);
}else if(list.size()==2){
//若列表包含两个元素,则返回它们已连接
//例如,我们有5和1的列表
//我们将5乘以10(50),然后再加上1,
//因此,5和1的输出将为51
返回列表。获取(0)*10+列表。获取(1);
}
//为下一个三角形的直线创建新列表
List newList=newarraylist();
//迭代现有列表的每个元素
对于(int i=0;i=10){
//把它翻译成字符串
字符串s=String.valueOf(a);
//获取字符串的每个字符,将其转换为数字并添加到新列表中
//例如,如果a=157,则三个新元素将添加到新列表中(1、5、7)
对于(int j=0;j
公共无效测试(){
ArrayList测试=新的ArrayList();
测试。添加(1);
测试。添加(0);
测试。添加(0);
测试。添加(3);
测试。添加(1);
ArrayList ret=doTheMagic(测试);
for(整数i:ret)
系统输出打印LN(i);
System.out.println(transformInDigit(ret));
}
private int transformingit(最终ArrayList值){
int-ret=0;
int size=values.size();
对于(int i=0;ipublic static int-yourFunction(ArrayList列表){
String number=“;//用数字填充字符串
for(整数i:列表){
数字+=字符串的值(i);
}//使用java8 lambda函数可能会更好
字符串tmp_编号;//需要临时字符串
while(number.length()>2){
tmp_编号=”;
对于(int i=0;i
因为你总是有相同数量的数字,所以你可以不用循环就可以做到这一点。
在第一步中,计算第一个元素+第二个元素,并将结果保存在新数组的第一个索引中。然后计算第二个元素+第三个元素,并将结果保存在新数组的第二个索引中。依此类推。然后对新数组中的结果执行相同的操作,直到得到结果为止
此外,您还必须在每次计算后计算交叉和。为此,您可以执行以下操作:
public int crossSum(int n) {
int sum = 0;
while(n > 0) {
int digit = n%10;
sum += digit;
n /= 10;
}
return sum;
}`
在最后一步中,您不计算交叉和。当只有一个数字时,您显示的结果前面有一个零。因此您会得到一个两位数的结果。就个人而言,我希望您先表现出一些努力;您能公布哪些不起作用的结果吗?我也不清楚实际的计算规则是什么。@DaveNewton它是就像一个帕斯卡三角形向下,除了你需要把两个数字切成两个一位数的数字,如果这个方案还剩下2个或1个数字,那么把这两个数字合并成一个数字——这是我的猜测。这基本上只是列表操作,如果允许你有第二个
临时列表,其中y你计算新的结果,然后替换原来的结果,这实际上非常简单-你只需添加i
和i+1
,添加到另一个列表中,检查是否有大于10的数字,将它们分成两个数字(先除以10,然后将剩余部分作为新元素添加到该元素之后),然后检查列表中是否有2个或更少的元素,如果是,则只需将它们的数字设为5*10+1。这感觉像是一项作业,我相信你可以完成。
public static int yourFunction(ArrayList<Integer> list){
String numbers = ""; // fill a string with your numbers
for(Integer i : list){
numbers += String.valueOf(i);
} // could be nicer with java8 lambda function
String tmp_numbers; // temporary string needed
while(numbers.length() > 2){
tmp_numbers = "";
for(int i = 0; i < numbers.length()-1; ++i){
// add two following numbers
// substring to read digit by digit
int v = Integer.parseInt(numbers.substring(i,i+1)); // first digit
v += Integer.parseInt(numbers.substring(i+1,i+2)); // + second
tmp_numbers = tmp_numbers + String.valueOf(v); // and fill the tmp string with it
}
numbers = tmp_numbers; // set the tmp string to our new beginning
}
return Integer.parseInt(numbers);
}
public int crossSum(int n) {
int sum = 0;
while(n > 0) {
int digit = n%10;
sum += digit;
n /= 10;
}
return sum;
}`