我无法从单个数组中减去值。如果我将数字1,2,3,4,5存储在数组中,我该如何找到差异?
例如1-2-3-4-5 = -13
我知道如何对数组的值求和但是从下一个数组元素中减去一个数组元素以获得正确的答案。
int sum = 0;
if (operator == '+'){
for ( int j = 0; j < intArray.length; j++ ) {
sum += intArray[j];
}
}
if (operator == '-'){
for ( int j = 0; j < intArray.length; j++ ) {
sum += intArray[j] - intArray[j+1] ;
}
}
System.out.println("The answer is " + sum);
答案 0 :(得分:2)
//这是解决问题的一种非常简单的方法
public class Minimize {
public static int substractArrayValues(int [] q){
int val=0;
for (int i=0; i<q.length; i++){
if (i==0){
val=q[i];
}
else {
val=val-q[i];
}
}
return val;
}
public static void main(String[] args) {
int [] q={1,2,3,4,5};
System.out.println(substractArrayValues(q));
}
}
这将打印-13
答案 1 :(得分:1)
我假设您要减去1-2-3-4-5,它等于-13。
所以这就是你的错误sum+=intArray[j] - intArray[j+1] ;
操作: -
Iteration 1:- sum=-1 which is (1-2) sum=-1
Iteration 2:sum=sum+(2-3) which is (-1+2-3) sum=-2
Iteration 3:sum=sum+(3-4) which is (-2+3-4) sum=-3
Iteration 4:sum=sum+(4-5) which is (-3+4-5) sum=-4
Iteration 5:sum=sum+(5-Garbage value or indexoutofbound exception)
sum=garbage value
尝试使用sum-=intArray[j];
答案 2 :(得分:1)
使用function RunProcessAsCurrentUser(FileName: string): Boolean;
var
ProcessId: Integer;
hWindow, hProcess, TokenHandle: THandle;
si: Tstartupinfo;
p: Tprocessinformation;
lpEnvironment: Pointer;
begin
Result := False;
hWindow := FindWindow('Progman', 'Program Manager');
if hWindow = 0 then Exit;
GetWindowThreadProcessID(hWindow, @ProcessID);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessID);
if hProcess = 0 then Exit;
try
if not OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, TokenHandle) then Exit;
FillChar(si,SizeOf(si),0);
with Si do begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := SW_NORMAL;
lpDesktop := PChar('winsta0\default');
end;
lpEnvironment := nil;
CreateEnvironmentBlock(@lpEnvironment, TokenHandle, FALSE);
try
Result := CreateProcessAsUser(TokenHandle, nil,
PChar('"'+FileName+'"'),
nil, nil, FALSE, CREATE_DEFAULT_ERROR_MODE,
lpEnvironment, nil, si, p);
finally
DestroyEnvironmentBlock(lpEnvironment);
end;
finally
CloseHandle(hProcess);
end;
end;
和一些函数式编程
IntStream
答案 3 :(得分:0)
你应该从索引0处的和开始,然后调用 - =来表示所有其他元素。目前你正在做索引 - (索引-1),因为你没有检查越界,所以它将失败。此外,当前实现中的数学运算是错误的,因为您使用值减去两次而不是一次。
使用减法方法A [1,2,3,4]
取此数组sum = 0;
sum += 1 - 2;
sum is -1; (Correct)
sum += 2 - 3;
sum is (-1 + -1) = -2 (Wong, should be -4)
sum += 3 - 4;
sum is (-2 - 1) = -3 (Wrong should be -8)
sum += 4 - A[4] (ERROR index out of bounds)
以下是一次减去值
的实现if (operator == '-'){
sum = intArray.length > 0 ? intArray[0] : 0;
for ( int j = 1; j < intArray.length; j++ ) {
sum -= intArray[j];
}
}
答案 4 :(得分:0)
您始终对运营商+=
执行正余额-
。
但是如何使用Stream
-API呢?
IntStream.of(1, 2, 3, 4, 5)
.reduce(operatorFunction('-'))
.ifPresent(System.out::println);
使用以下IntBinaryOperator
- 返回函数:
static IntBinaryOperator operatorFunction(char operator) {
if (operator == '-') {
return (int1, int2) -> int1 - int2;
}
return (int1, int2) -> int1 + int2;
}
按照您的预期打印-13
。这就是你所需要的。请注意,您还可以使用IntStream.sum
来获得简单的总和。但是,如果您愿意,可以使用operatorFunction
添加*
或÷
。
编写上述代码的另一种方法(使用中间值):
int[] yourInputArray = {1, 2, 3, 4, 5};
char operator = '-';
OptionalInt = Stream.of(yourInputArray)
.reduce(operatorFunction(operator));
在此处,您可以拨打orElse(0)
或使用orElseThrow(() -> ...)
等处理异常。只需查看OptionalInt
-javadoc您的选项即可。一旦您离开原始int
,您可能希望使用Stream
,BinaryOperator<Integer>
和Optional<Integer>
来交换代码。
顺便说一句,您当前的代码中还有一个IndexOutOfBoundException
。但是,如果可以使用Stream
以及如此少的代码行,为什么要搞乱索引和数组呢?
答案 5 :(得分:0)
我们必须取数组中的第一个值,然后根据运算符从中减去或添加剩余值。这样做如下所示:
int sum, dif;
if(intArray.length >= 1){
sum = intArray[0];
dif = intArray[0];
}
if (operator == '+'){
if(intArray.length > 1){
for ( int j = 1; j < intArray.length; j++ ) {
sum += intArray[j];
}
}
System.out.println("The sum is = " + sum);
}
if (operator == '-'){
if(intArray.length > 1){
for ( int j = 1; j < intArray.length; j++ ) {
dif -= intArray[j];
}
}
System.out.println("The difference is = " + dif);
}