gpt4 book ai didi

java - 计算你借了多少次

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:09 25 4
gpt4 key购买 nike

我是 Java 新手。我对这段代码有一个问题,其中你必须计算你借了多少次才能进行减法。例如:

x = 312;
y = 34;

输出应该是:2,因为你在减法中借了2次。我的问题是这样的,每当我输入x=12,y=2时,输出都是1,同样,当x=12,y=1时,它应该是0。

这是我的代码:

import java.util.Scanner;

public class BorrowOut{
public static void main (String [] args){

Scanner in = new Scanner (System.in);
int x;
int y;
int i = 0;
int j = 0;
int minus = 0, borrow = 0;
int c1 = 0, c2 = 0;

System.out.print("\nx: ");
x = in.nextInt();

//this will convert the integer (x) into string and then count its length;
int len = (Integer.toString(x).length());
int[] a = new int[len];

System.out.print("y: ");
y = in.nextInt();

minus = x - y;
System.out.print("\nDifference: " + minus);

//this will convert the integer (y) into string and then count its length
int len2 = (Integer.toString(y).length());
int[] b = new int[len2];

//splitting the inputs into a single token storing it in an array
while(x>0 && y>0)
{
a[i++] = x % 10;
x = x/10;
}
while(y>0)
{
b[j++] = y % 10;
y = y/10;
}
/*System.out.println("\nx");

//printing out the index and the token
for (int k = 0; k<a.length; k++)
{
System.out.println("a[" + k + "] " + a[k]);
}
System.out.println("\ny");
for (int l = 0; l<b.length; l++)
{
System.out.println("b[" + l + "] " + b[l]);
}*/
for (int k = 0; k<a.length; k++)
for (int l = 0; l<b.length; l++)
{
c1 = k;
c2 = l;
if (a[k]<b[l])
{
a[k] = a[k] + 10;
borrow+=1;
}

}
if (c1!=c2)
{
borrow-=1;
}
System.out.print ("\nBorrow: " + borrow);
System.out.println();
}
}

最佳答案

简单的答案是您编写了一个双循环。

for (int k = 0; k<a.length; k++)
for (int l = 0; l<b.length; l++)
{
c1 = k;
c2 = l;
if (a[k]<b[l])
{
a[k] = a[k] + 10;
borrow+=1;
}

}

它的作用是:设置 k为 0,然后 while k为 0,则使用 l作为遍历整个数组 b 的索引。然后增加k到 1,然后开始 l从一开始就遍历整个数组 b 。然后k变成 2,遍历数组 b再次......这不是你想要的。如果您将数字相乘,您可能会这样做。但是当你减去它们时,你想要并行地遍历数组——也就是说,看看 a[0]b[0]同时,a[1]b[1] , a[2]b[2]等等。为此,您只需使用一个循环和一个索引。 (如果一个数组比另一个数组短,您需要小心如何处理它。)(确保在 10000 减 9999 上测试您的程序。)

(P.S. 最好避免使用单个字母 l 作为变量名。它看起来太像 1 。)

更多:回答我认为您在评论中提出的问题:对于这个问题,您的索引对于 a 是相同的。和b ,因为您已经向后存储了数字,低位数字在 a[0] 中和b[0] (解决这个问题的一个好方法)。如果您遇到类似的问题,需要并行处理两个具有不同索引的数组,则可以将多个索引放在一个 for 中。陈述。假设您有两个长度可能不同的数组,并且您希望向后遍历这两个数组,并在到达较短数组的开头时停止:

for (int i = array1.length - 1, j = array2.length - 1;
i >= 0 && j >= 0;
i--, j--) {
// do something with array1[i] and array2[j]
}

每次循环时,i 都会减少和j 。这与带有一个 for 的双循环非常不同。嵌套在另一个里面;在双循环中,仅改变内部索引,而外部索引保持不变;然后,当内部循环使用内部索引完成时,然后外部索引将更改,并且内部循环将重新开始。

关于java - 计算你借了多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057309/

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