Java 程序仅在最后一次在数组中输入负数时工作
由于某些原因,当在任何正数之前输入负数时,我的computePositiveSum“正数之和”的最终输出是错误的。现在发生的似乎不是忽略负数,而是从总数中减去它的总和。所以,如果我的输入是(-4,2,3),它会说正数的和是1。我真的不确定这个方法有什么问题Java 程序仅在最后一次在数组中输入负数时工作,java,arrays,methods,Java,Arrays,Methods,由于某些原因,当在任何正数之前输入负数时,我的computePositiveSum“正数之和”的最终输出是错误的。现在发生的似乎不是忽略负数,而是从总数中减去它的总和。所以,如果我的输入是(-4,2,3),它会说正数的和是1。我真的不确定这个方法有什么问题 /* Description: Write a program that reads in a sequence of numbers (not necessary integers) from standa
/* Description: Write a program that reads in a sequence of numbers
(not necessary integers) from standard input until 0
is read, and stores them in an array. This is done
using iteration (choose for, while, or do while loop).
You may assume that there will not be more than 100 numbers.*/
import java.util.Scanner;
import java.text.DecimalFormat;
public class Assignment2
{
public static void main (String[] args)
{
Scanner scan= new Scanner(System.in);
int count=0;
double[] num= new double[100];
for(int i=0;i<num.length;++i)
{
num[i]= scan.nextDouble();
if (num[i] == 0) {
break; }
count++;
}
double min= findMin(num,count);
double pos= computePositiveSum(num, count);
int c= countNegative(num,count);
DecimalFormat fmt = new DecimalFormat ("0");
DecimalFormat fmt2 = new DecimalFormat ("$0.00");
System.out.println("The minimum number is " +fmt.format(min));
System.out.println("The sum of the positive numbers is "+fmt2.format(pos));
System.out.println("The total number of negative numbers is " +c);
}//End Main
public static double findMin(double[] num, int count)
{
double min = num[0];
for(int i=1;i<count;i++){
if(num[i] < min)
{
min = num[i];
}
}
return min;
}//end findMin
public static double computePositiveSum(double[] num, int count)
{
double pos=num[0];
for(int i=1;i<count;i++){
if(num[i] > 0)
{
pos=pos+num[i];
}
}
return pos;
}
public static int countNegative(double[] num, int count)
{
double a=num[0];
int c=0;
for(int i=0;i<count;i++){
if(num[i] < 0)
{
c++;
}
}
return c;
}//end countNegative
}
/*说明:编写一个按数字顺序读取的程序
(不需要整数)从标准输入到0
读取,并将其存储在数组中。这已经完成了
使用迭代(选择for、while或do while循环)。
您可以假设不会有超过100个数字*/
导入java.util.Scanner;
导入java.text.DecimalFormat;
公共课堂作业2
{
公共静态void main(字符串[]args)
{
扫描仪扫描=新扫描仪(System.in);
整数计数=0;
double[]num=新的双精度[100];
对于(int i=0;i您正在将数组中第一个元素的值分配给实际总和pos
。因此,如果第一个元素为负,它将被添加到总和中(代码中没有检查是否为正)
要解决此问题,请使用0
初始化sumpos
(顺便说一下,它不是描述性名称)。然后从0
而不是从1
在for
循环中迭代
public static double computePositiveSum(double[] num, int count)
{
double pos = 0;
for (int i = 0; i < count; i++) {
if (num[i] > 0) {
pos = pos + num[i];
}
}
return pos;
}
public static double computePositiveSum(double[]num,int count)
{
双pos=0;
for(int i=0;i0){
pos=pos+num[i];
}
}
返回pos;
}
注意:我建议您使用更具描述性的名称命名变量。我会用名称sum
声明pos
。当然,这与结果无关,但有助于人们理解代码。您正在为实际的sumpos
指定fi的值数组中的rst元素。因此,如果第一个元素为负,它将被添加到总和中(代码中没有检查是否为正)
要解决此问题,请使用0
初始化sumpos
(顺便说一下,它不是描述性名称)。然后从0
而不是从1
在for
循环中迭代
public static double computePositiveSum(double[] num, int count)
{
double pos = 0;
for (int i = 0; i < count; i++) {
if (num[i] > 0) {
pos = pos + num[i];
}
}
return pos;
}
public static double computePositiveSum(double[]num,int count)
{
双pos=0;
for(int i=0;i0){
pos=pos+num[i];
}
}
返回pos;
}
注意:我建议您使用更具描述性的名称命名变量。我会使用名称sum
声明pos
。当然,这与结果无关,但有助于人们理解代码。您没有检查数组的第一个元素
public static double computePositiveSum(double[] num) {
double sum = 0.0;
for(double d : num) {
if(d > 0) {
sum += d;
}
}
return sum;
}
您没有检查数组的第一个元素
public static double computePositiveSum(double[] num) {
double sum = 0.0;
for(double d : num) {
if(d > 0) {
sum += d;
}
}
return sum;
}
因为你在做什么
double pos = num[0];
然后遍历需要执行的数组的其余部分
double pos = 0;
for (int i = 0; ...)
因为你在做什么
double pos = num[0];
然后遍历需要执行的数组的其余部分
double pos = 0;
for (int i = 0; ...)
您需要检查元素0是否大于零。您需要检查元素0是否大于零。与您的问题无关,但您可能希望在联机发布源代码时从源代码中删除您的姓名和学生ID。您为什么要这样做
?如果是负数怎么办?谢谢你的catch Pakku。这与你的问题无关,但你可能想在网上发布时从源代码中删除你的姓名和学生ID。你为什么要做double pos=num[0];
?如果是负数怎么办?谢谢catch Pakku。