Java 对接受列表的减法循环进行编码

Java 对接受列表的减法循环进行编码,java,loops,for-loop,subtraction,Java,Loops,For Loop,Subtraction,我正在做一个计算器,需要一个减法循环才能使代码正常工作。现在它正在扫描列表,但只扫描第一个和最后一个数字,而不是整个列表 if(a.equals("Subtract")) { ArrayList<Integer> list = new ArrayList<Integer>(); System.out.println("Enter integers one at a time in order"); System.out.pr

我正在做一个计算器,需要一个减法循环才能使代码正常工作。现在它正在扫描列表,但只扫描第一个和最后一个数字,而不是整个列表

if(a.equals("Subtract")) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        System.out.println("Enter integers one at a time in order");
        System.out.println("When completed type done");
        while (scan.hasNextInt()) {
            list.add(scan.nextInt());
        }
        Integer[] nums = list.toArray(new Integer[0]);
        for (int i = 0; i < nums.length-1; i++) {
            sum = nums[0];
            sum = sum - nums[i+1];
        }
        System.out.println("Your total is " + sum);
        System.out.println("-----------------------------");
        main(args);
        }
if(a.等于(“减法”)){
ArrayList=新建ArrayList();
System.out.println(“按顺序一次输入一个整数”);
System.out.println(“完成类型时”);
while(scan.hasNextInt()){
添加(scan.nextInt());
}
整数[]nums=list.toArray(新整数[0]);
对于(int i=0;i

仅将循环的第一个和最后一个数字减去第一个元素的值,而不是将循环的每一次迭代初始化的整个循环减去第一个元素的值:

sum = nums[0];

您应该在循环之前这样做。

我怀疑Java 8 streams不是OP所追求的,但为了完整起见,这里有一种方法可以使用列表,而不是使用流的for循环

if (!list.isEmpty) {
    sum = list.get(0) - list.subList(1, list.size()).stream().reduce(0,Integer::sum);
}
如果首选循环,则至少使用已创建的列表

sum = list.get(0);
for (int i = 1; i < list.size(); i++) {
    sum -= list.get(i);
}
sum=list.get(0);
对于(int i=1;i
你就快到了。 将第一个值的赋值移到循环外部,并从数组的第二个元素(索引=1)开始循环:

sum=nums[0];
对于(int i=1;i

编辑:谢谢Joakim的评论。修复了for循环中的结束条件

您正在为循环中的每个迭代分配
sum
。另外,我不确定
sum-=sum-nums[I+1]
的意义是什么,因为您正在从自身减去sum。如果代码本身的逻辑不清楚,请逐行运行循环以查看它在做什么。您在每次迭代中分配
sum
,这可能不是您想要的。行
sum-=sum-nums[i+1]
似乎不合理,因为它基本上意味着
sum=sum+nums[i+1]
由于明显的原因,这不会生成正确的结果。请测试你的代码。
sum = nums[0];
for (int i = 1; i < nums.length; i++) {
    sum = sum - nums[i];
}