【问题标题】:Adding Numbers and printing the sum vertically using arrays添加数字并使用数组垂直打印总和
【发布时间】:2016-08-04 17:09:54
【问题描述】:

我必须创建一个程序,将两个整数相加并垂直打印总和。
例如,我有。

a=323, b=322.

输出应该是:

6
4
5

我已经创建了整数最多两位数的代码,但我希望它至少可以工作三位数。

以下是我能想到的最好的。
这可能是完全错误的,但我面临的唯一问题是数组的声明。
它表示数组可能未初始化。
如果我将其设置为 null,那么它以后也不会为其赋值。

我知道我在这里可能犯了一个大错误,但如果有人能帮助我,我将不胜感激。
请记住,我不能为此代码使用任何其他功能。
希望我很清楚。

public class Vert
{
    public static void main(String args[])
    {
        int n,i=0,j,a=323,b=322;
        int s[];
        n=a+b;
        while(n>9)
        {
            s[i]=n%10;
            i++;
            s[i]=n/10;
            if(s[i]>9)
            {
                n=s[i];
            }
        }
        j=i;
        for(j=i;j>=0;j--)
        {
            System.out.println(+s[j]);
        }
    }
}

【问题讨论】:

  • +s[j] 这看起来可能是个问题...但是,错误是什么?
  • 作为旁注,想想789456这样的案例:结果应该是什么?
  • @cricket_007 错误是“S 可能未初始化”,如果我将“null”分配给 s[],那么它以后不会分配任何其他值。我想知道如何初始化该数组。

标签: java arrays loops compiler-errors sum


【解决方案1】:

字符串转换看起来像是作弊,所以这里是Stack

int a = 323, b = 322;

java.util.Stack<Integer> stack = new java.util.Stack<>();

int n = a + b;
while (n > 0) {
    stack.push(n % 10);
    n = n / 10;
}

while (!stack.isEmpty())
    System.out.println(stack.pop());

如果需要数组,则需要两次遍历总和

int a = 323, b = 322;

// Get the size of the array
int n = a + b;
int size = 0;
while (n > 0) {
    size++;
    n = n / 10;
}

// Build the output
int s[] = new int[size];
n = a + b;
for (int i = size - 1; n > 0; i--) {
    s[i] = n % 10;
    n = n / 10;
}

// Print
for (int x : s) {
    System.out.println(x);
}

【讨论】:

  • 非常感谢,但你能解释一下你用来打印的 for 循环吗,因为我不熟悉那种格式。谢谢
  • 有没有一种方法可以使用“简单”for 循环而不是使用“:”运算符来打印输出。谢谢
  • 有,但它是增强的 for 循环,我相信您有能力搜索 internetz 并了解差异
【解决方案2】:

要初始化一个数组,你需要将数组的大小指定为下一个:

int s[] = new int[mySize];

如果您不知道数组的大小,则应考虑使用 ListInteger 代替 next:

List<Integer> s = new ArrayList<Integer>();

这是如何做到的:

// Convert the sum into a String
String result = String.valueOf(a + b);
for (int i=0; i <result.length();i++) {
    // Print one character corresponding to a digit here per line
    System.out.println(result.charAt(i));
}

【讨论】:

  • 如何确定mySize
  • @cricket_007 坦率地说,我并没有真正得到 OP 想要实现的目标,我只是尝试回答他最初的问题
  • 如果这是一项作业,我不确定他的老师是否愿意在这里看到List。如果他不想根据位数硬编码大小或在运行时预先计算位数,他应该只废弃数组并在数字出现时打印数字(如使用局部变量)......跨度>
  • OP 想垂直打印数字的总和。似乎需要一个数组。不过,有人会认为String.valueOf(n) 直接打印数字就是答案
  • @cricket_007 好的,我现在知道了
【解决方案3】:

我会这样做:

int a = 322;
int b = 322;
int sum = a + b;
String s = Integer.toString(sum);
for(int i = 0; i < s.length(); i++) {
  System.out.println(s.charAt(i));
}

但是您的问题看起来需要一个数组。

步骤与我的解决方案相同:

  1. 使用 int 值
  2. 对 int 值求和(运算)
  3. 在数组/字符串中转换 int 值
  4. 输出数组/字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多