我是java中的新蜜蜂...所以我有一个任务,我被困住可以有人帮助我
我必须编写一个读取未指定数量的整数的程序,确定读取了多少正值和负值,并计算输入值的总和和平均值(不计零)。当用户输入0时,程序应该结束。
示例运行:
Enter an int value (the program exits if the input is 0: 1 3 -1 2 0
The number of positives is 3
The number of negatives is 1
The total is 5
The average is 1.25
我写的东西是......逻辑看似正确,但它不起作用......
我写的代码是
public class AverageNumbers {
public static void main(String[] args)
{
int data = 0;
int positive = 0;
int negative = 0;
int count = 0;
while (data !=0)
{
String strdata = JOptionPane.showInputDialog ("Enter the integer The input ends if the value is 0") ;
data = Integer.parseInt(strdata);
if (data < 0 || data > 0){
count++;
if (data >0)
positive++;
else if (0<data)
negative++;
count = count + data;
count++;
}
String strOutput = "The number of positives is " + positive;
JOptionPane.showMessageDialog(null, strOutput);
strOutput = "The number of negatives is " + negative;
JOptionPane.showMessageDialog(null, strOutput);
strOutput = "The number of total is " + count ;
JOptionPane.showMessageDialog(null, strOutput);
strOutput = "The number of average is " + count/data ;
JOptionPane.showMessageDialog(null, strOutput);
}
}
答案 0 :(得分:1)
在while循环条件中,您正在检查data !=0
是否返回false并且while循环代码块未执行,因为数据在程序开始时设置为int data = 0;
。
您的问题有两个简单的解决方案:
使用do...while
循环,请参阅下面的示例
int data = 0;
...
do{
...
} while (data != 0);
答案 1 :(得分:1)
这里有两个错误:
您的循环永远不会执行,因为在初始运行时data == 0
。您可以通过提前提问而不是稍后提出问题来解决此问题:
String strdata = JOptionPane.showInputDialog ("Enter the integer The input ends if the value is 0") ;
int data = Integer.parseInt(strdata);
然后,在循环的后面(向下):
strdata = JOptionPane.showInputDialog ("Enter the integer The input ends if the value is 0") ;
data = Integer.parseInt(strdata);
即使如果你能够进入循环,你也会获得所有正数计数而没有负数计数。原因如下:data > 0
和0 < data
是等效的布尔语句。
你可能的意思是:
if (data > 0) {
positive++;
} else if (data < 0) {
negative++;
}
答案 2 :(得分:1)
正如其他人所说,初始化data
是一个问题,但请参阅下面的建议。
你要遇到的另一个问题是你count
做了太多。
假设count
从0开始,用户输入3。
在
if (data < 0 || data > 0){
count++;
你现在在一个,你进入
count = count + data;
count++;
计数最多4,然后++最多5。
即使你输入了0,你仍然可以在打破循环之前改变计数。
尝试像Orel那样提到一个总和int来跟踪总和。保持计数只计数,只计算最底部的计数++,完全擦除
if (data < 0 || data > 0){
count++;
相反,尝试这样的事情进行0检查,以防止搞砸整个事情:
while(true){
String strdata = JOptionPane.showInputDialog ("Enter the integer The input ends if the value is 0") ;
data = Integer.parseInt(strdata);
if (data == 0)
break;
...
}
你也可以在这里使用do / while。这将允许您将数据初始化为您喜欢的任何(或没有)。另一件事,确保他们输入的值不是null并且是一个int,当你提示输入一个数字时,你的教授肯定会输入“sleirjwlfie”,因为最好的做法是假设用户会破坏你的程序。所以伪代码就像:
while(true){
// get value from user
// if value is null OR value is not an int
continue;
}
我会让你理清如何在那里不要杀死学习经历,但我知道这种事情不止一次让我在校学习。
祝你好运!答案 3 :(得分:0)
嗯,第一个问题就在这里。您将数据初始化为0:
int data = 0;
然后你的循环条件检查数据!= 0:
while (data !=0) {
...
}
由于数据分配为0,因此永远不会输入循环。
答案 4 :(得分:0)
您应该添加'sum'int变量并更改此行
count = count + data;
有了这个
总和+ =数据;
同时将while-loop
更改为do-while
循环。
答案 5 :(得分:0)
+1用于尝试和编写几乎正常工作的代码:)
正如其他人指出的那样,你的代码几乎没有需要修复的错误。
您使用的是IDE吗? 使用IDE(Eclipse是最好的之一)并逐步调试代码以检查发生了什么。 谷歌如何使用IDE和调试。
以下是工作代码供您参考。
import javax.swing.*;
public class AverageNumbers {
public static void main(String[] args)
{
int data = 0;
int positive = 0;
int negative = 0;
int count = 0;
int total = 0;
double avg = 0;
String strdata = JOptionPane.showInputDialog ("Enter the integer The input ends if the value is 0") ;
data = Integer.parseInt(strdata);
while (data !=0)
{
if (data >0) {
positive++;
} else {
negative++;
}
total = total + data;
count++;
strdata = JOptionPane.showInputDialog ("Enter the integer The input ends if the value is 0") ;
data = Integer.parseInt(strdata);
}
String strOutput = "The number of positives is " + positive;
JOptionPane.showMessageDialog(null, strOutput);
strOutput = "The number of negatives is " + negative;
JOptionPane.showMessageDialog(null, strOutput);
strOutput = "The number of total is " + count ;
JOptionPane.showMessageDialog(null, strOutput);
avg = total * 1.0 /count ;
strOutput = "The number of average is " + avg;
JOptionPane.showMessageDialog(null, strOutput);
System.exit(0);
}
}