计算你借了多少次

时间:2015-03-15 04:44:01

标签: java

我是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();
    }
}

2 个答案:

答案 0 :(得分:1)

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

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,然后当k为0时,使用l作为索引来遍历整个数组b。然后它会将k增加到1,然后在开始时开始l遍历整个数组b。然后k变为2,它再次遍历数组b ......这不是你想要的。如果你将这些数字相乘,那么你可能会做的事情就是这样。但是当你减去它们时,你想要通过 parallel 遍历数组 - 也就是说,同时查看a[0]b[0],{{1 }}和a[1]b[1]a[2]等。为此,您只想使用一个循环和一个索引。 (如果一个阵列比另一个阵列短,你需要小心处理它。)(确保你在10000减去9999上测试程序。)

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

更多:要回答我认为您在评论中提出的问题:对于此问题,1a的索引相同,因为你已经向后存储了数字,而ba[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嵌套在另一个循环中;在double循环中,只有内部索引被更改而外部索引保持不变;然后当使用内部索引完成内部循环时,然后更改外部索引并重新启动内部循环。

答案 1 :(得分:0)

这是我最新编辑的代码。我现在的问题是这样的:

x = 4500; y = 599;

输出为2,应为3。

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;
    }


    for (int k = 0; k<a.length; k++)
        for (int m = 0; m<b.length; m++)
    {
        c1 = k;
        c2 = m;
    }

    int aa=0;
    if (c1>c2)
    {
        aa = c1;
    }
    else
    {
        aa = c2;
    }

    for (int k = 0; k<aa; k++)
    {
        if (a[k]<b[k])
        {
            a[k] = a[k] + 10;
            borrow+=1;
        }
    }
    System.out.print ("\nBorrow: " + borrow);
    System.out.println();
}

}