gpt4 book ai didi

java - 我的大整数计算器没有按计划工作,任何 Java 开发人员都可以帮助我吗?

转载 作者:行者123 更新时间:2023-12-04 08:35:16 24 4
gpt4 key购买 nike

关闭。这个问题需要debugging details .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

10 个月前关闭。




Improve this question




我正在为我的 comp sci 课制作一个大整数计算器,但我加在一起的一些东西不起作用。基本上据我所知,它只适用于 100 及以下的数字(也可能是 999 及以下)。具体来说,我正在努力解决的是,当添加 934 + 168 时,它总是会出现 10102,而不是 1102。我之前已经将它加在一起,但在尝试解决其他问题的过程中,它不再起作用了。如果有人能够通过告诉我我可能出错的地方来帮助我修复我的代码,请这样做。谢谢!

public static void main(String[] args) {
System.out.println("Please enter a positive integer.");
LinkedList a = takeData();
System.out.println("Please enter another positive integer.");
LinkedList b = takeData();
LinkedList<Integer> sum = add(a, b);
//System.out.println("They add to equal:\t");
print(sum);
}


public static LinkedList<Integer> add(LinkedList<Integer> a, LinkedList<Integer> b) {
LinkedList<Integer> sum = new LinkedList<Integer>();
int decide = 0, s = 0;
;
if (a.size() == b.size())
decide = 1;
fillWithZeros(a, b, sum);
print(a);
print(b);
if (decide == 1)
s = a.size() + 1;
else
s = a.size();
int add = 0, count = 0;

for (int x = 0; x < s; x++) {
count = 0;
add = 0;
if (x != s && decide == 0 || decide == 1 && x != s - 1)
add = a.pollLast() + b.pollLast();
if (sum.size() != 0)
add += sum.getFirst();
if (add >= 10) {
add -= 10;
//if(sum.size()>0)
//add+=sum.get(0);
sum.addFirst(0);
sum.addFirst(1);
count++;
//if(sum.size()>=2) THIS DOES NOTHING
//add+= sum.get(1);
}
System.out.println("\nThe " + x + " digit equals = " + add);
System.out.println("x = " + x + "\nsum.size = " + sum.size());
/* if(sum.size()>s-1 && decide==1)
{
System.out.println("YOu stopperd here");
return sum;
}*/
if (x != 0) {
if (sum.size() >= x) {
add += sum.get(1);


if (add >= 10) {
add -= 10;
sum.addFirst(0);
sum.addFirst(1);
if (sum.size() >= 2)
add += sum.get(1);
//add-=10;
//sum.addFirst(1);
sum.set(1, add);
} else {
sum.set(1, add);
}

System.out.println(add);

//sum.set(0,add);
//}
//sum.add(x-1,add);
//sum.add(add);
} else {
//add+= sum.get(x-1);
if (count == 0)
sum.set(0, add);
else
sum.set(1, add);
}
} else
sum.addLast(add);
print(sum);
if (sum.size() > s - 1 && decide == 1)
return sum;

}


return sum;
}

public static void print(LinkedList<Integer> a) {
System.out.println("\nSize of LinkList:\t" + a.size());
for (int x = 1; x <= a.size(); x++)
System.out.print(a.get(x - 1));
}

public static void fillWithZeros(LinkedList<Integer> a, LinkedList<Integer> b, LinkedList<Integer> c) {
while (b.size() != a.size()/*||c.size()!=b.size()*/) {
if (a.size() > b.size())
b.addFirst(0);
else if (a.size() < b.size())
a.addFirst(0);
/*else
c.addFirst(0);*/
}
/*c.addFirst(0);*/
}

public static LinkedList<Integer> takeData() {
boolean correctData = true;
Scanner read = new Scanner(System.in);
LinkedList list = new LinkedList();
do {
if (correctData == false)
System.out.println("Please re-enter a correct integer.");
String n = read.nextLine();
for (int x = 0; x < n.length(); x++) {
if (Character.isDigit(n.charAt(x))) {

int valueOf = n.charAt(x) - 48;
list.add(valueOf);

} else {
correctData = false;
break;
}
correctData = true;
}

} while (correctData == false);

return list;
}

最佳答案

您应该像在纸上一样添加数字,即从最后一位数字开始,添加它们,并在需要时保留 1。
使用 Iterator 遍历列表,您可能已经知道您可以这样做:

Iterator<Integer> iter = list.iterator();
while (iter.hasNext()) {
int digit = iter.next();
// use digit here
}
ListIterator 可以做同样的事情,但它也可以向后迭代:
ListIterator<Integer> iter = list.listIterator(list.size()); // start at end
while (iter.hasPrevious()) {
int digit = iter.previous(); // iterate backwards
// use digit here
}
LinkedList class 也非常适合向后构建结果,因为除了 add() ,它还有 addLast() (做同样的事情),以及 addFirst() ,我们可以使用它来构建从最后一位数字开始的结果。
知道所有这些之后就变得很简单了,就像这样:
public static LinkedList<Integer> add(LinkedList<Integer> a, LinkedList<Integer> b) {
LinkedList<Integer> sum = new LinkedList<>();
int carry = 0;
ListIterator<Integer> aIter = a.listIterator(a.size());
ListIterator<Integer> bIter = b.listIterator(b.size());
while (carry != 0 || aIter.hasPrevious() || bIter.hasPrevious()) {
int digitSum = carry;
if (aIter.hasPrevious())
digitSum += aIter.previous();
if (bIter.hasPrevious())
digitSum += bIter.previous();
if (digitSum <= 9) {
carry = 0;
} else {
carry = 1;
digitSum -= 10;
}
sum.addFirst(digitSum);
}
return sum;
}

关于java - 我的大整数计算器没有按计划工作,任何 Java 开发人员都可以帮助我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64831220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com