用while循环计算负整数和正整数

问题描述

需要修复我的程序。 使用WHILE LOOP编写一个Java程序:多少个正数和负数?用户提示 整数并以数字0结尾。 您将在我的输出中看到,如果用户输入1 2 3 -1 -2 -3 0 我的输出答案:2正/ 3负。 第一个正数不计算在内。 请让我知道我的错误在哪里。我找不到它。

    Scanner input= new Scanner(system.in);
    
    //int data;
    int count = 0;
    int negative=0;
    int positive =0;
    
    System.out.print("Enter an integer (Program ends if enter 0): ");
    int data = input.nextInt();
    
    
    
    while (data !=0) {
    
    System.out.print("Enter an integer (Program ends if enter 0): ");
    data=input.nextInt();
    //count++;
    if (data < 0){
    negative++;
    }else if (data > 0){
    positive++;
    }
    count++;
  }
    System.out.println(positive + " positive numbers");
    System.out.println(negative + " negative numbers");
    
 }
}

output:
run:
Enter an integer (Program ends if enter 0): 1
Enter an integer (Program ends if enter 0): 2
Enter an integer (Program ends if enter 0): 3
Enter an integer (Program ends if enter 0): -1
Enter an integer (Program ends if enter 0): -2
Enter an integer (Program ends if enter 0): -3
Enter an integer (Program ends if enter 0): 0
2 positive numbers
3 negative numbers
BUILD SUCCESSFUL (total time: 11 seconds)

解决方法

您的代码跳过了第一个条目,因为您以这种方式进行了编码。看这些行:

System.out.print("Enter an integer (Program ends if enter 0): ");
int data = input.nextInt();

您要求用户输入数据,但是您对此不做任何事情。您所有的数据处理都在while循环中进行。

用以下内容替换这两行:

int data = 0;

您需要做的就是声明用于输入的变量供以后使用-您不需要立即使用它。

您还必须修改while条件,以便在循环的第一次迭代中,值为0的数据不会自动退出程序:

while ((data !=0) || (count == 0 && data == 0)) {

输出:

Enter an integer (Program ends if enter 0): 1
Enter an integer (Program ends if enter 0): 2
Enter an integer (Program ends if enter 0): 3
Enter an integer (Program ends if enter 0): -1
Enter an integer (Program ends if enter 0): -2
Enter an integer (Program ends if enter 0): -3
Enter an integer (Program ends if enter 0): 0
3 positive numbers
3 negative numbers
,

似乎您正在while循环外进行第一个输入。

System.out.print("Enter an integer (Program ends if enter 0): ");
int data = input.nextInt(); // the first input 1 store in here

并且未选中此1。

      while (data !=0) {
 System.out.print("Enter an integer (Program ends if enter 0): ");
data=input.nextInt();// 2,3,-1,-2,-3,0 are inside the loop.

仅检查此值。

,

进入循环后,您将无法使用第一个输入。

  1. 您正在读取输入并检查输入是否不等于零
  2. 再次进入循环后,您将从扫描仪读取输入并将其存储到可变数据(此处先前的数据将被覆盖)

更新的代码:

扫描仪输入=新的扫描仪(System.in);

// int data;
int count = 0;
int negative = 0;
int positive = 0;

System.out.print("Enter an integer (Program ends if enter 0): ");
int data = input.nextInt();

while (data != 0) {
    // count++;
    if (data < 0) {
        negative++;
    } else if (data > 0) {
        positive++;
    }
    count++;
    
    System.out.print("Enter an integer (Program ends if enter 0): ");
    data = input.nextInt();
}
System.out.println(positive + " positive numbers");
System.out.println(negative + " negative numbers");