为了账号安全,请及时绑定邮箱和手机立即绑定

请检查我想使用的代码 while 当用户在第一次输入中输入 0 时条件必须停止

请检查我想使用的代码 while 当用户在第一次输入中输入 0 时条件必须停止

红糖糍粑 2023-05-10 15:40:50
请检查我的代码,实际上我想尝试 while 循环条件,如果用户为第一个数字 (n1) 输入 0,它必须退出循环,否则继续计算。class Test{  public static void main(String []args)  {     Scanner sc=new Scanner(System.in);     System.out.println("Enter two numbers:");     float n1=sc.nextFloat();     float n2=sc,nextFloat();     float ans1=0;     float ans2=0;     float ans3=0;     int count=0;     while(n1!=0){       ans1=n1+n2;       ans2=n1*n2;        count++;     }     ans3=ans1/ans2;     System.out.println("Answer is "+ans3);  }}实际输出:Enter the number2.03.04.0 0Answer is infinity预期输出:Enter the number2.03.0Answer is 0.83Enter the number 4.05.0Answer is 0.45Enter the number0
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您可以通过将所有内容移至循环中来极大地简化您的代码。然后,您可以将if条件breaks 置于循环 if n1is之外0,并将 s 更改loop为无限循环 untilbreak被调用。


Scanner sc=new Scanner(System.in);

while (true){

    System.out.println("Enter two numbers (0 to quit):");


    float n1=sc.nextFloat();


    if (n1 == 0){

        break; //New part of the code

    }


    float n2=sc.nextFloat();

    float ans1=n1+n2;

    float ans2=n1*n2;

    float ans3=ans1 / ans2;

    System.out.println("Answer is "+ans3);

}

这种方式0永远不会用于计算,也infinity永远不会打印,因为您不会除以0.


示例运行:


Enter two numbers (0 to quit):

1 4

Answer is 1.25

Enter two numbers (0 to quit):

2 3

Answer is 0.8333333

Enter two numbers (0 to quit):

0


查看完整回答
反对 回复 2023-05-10
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

虽然这是一个非常简单的问题,我希望您能够自己解决,但在这里我尝试向您解释这个问题并提出解决方案:


您希望重复输入直到输入 0。while如您所见,您已经知道循环的概念。您现在可以使用它重复整个输入和计算,直到用户输入 0:


Scanner sc =new Scanner(System.in);

float n1 = 1;

while(n1 != 0){

    System.out.println("Enter two numbers:");

    [...]    

}

从上到下逐行浏览您的程序以了解您在做什么: 1. 创建一个扫描仪, 2. 定义 n1 = 1, 3. 只要 n1 != 0 ... 重复以下部分


然后,正如您提到的,您希望您的可执行文件在 n1 = 0 时立即终止,而不仅仅是在循环代码的末尾while。为此,您可以使用条件break:它直接跳转到循环的末尾,在您的情况下,就是代码的末尾。


我还想让您知道continue直接进入循环的下一次迭代的命令。例如,如果有人输入无效数据,这将很有帮助。


你可以使用它如下:


Scanner sc=new Scanner(System.in);

float n1 = 1;

while(n1 != 0){ //loop until n1 == 0

    System.out.println("Enter two numbers:");

    n1=sc.nextFloat();

    if(n1 == 0){ //if n1 equals 0

        break; // goes to the end of the loop

    }

    float n2=sc.nextFloat();

    if(n2 == 0){ //division by zero

        System.out.println("Division by zero, try again!");

        continue; //goes to the beginning of the loop again

    }


    float ans1=0;

    float ans2=0;

    float ans3=0;

    int count=0;


    ans1=n1+n2;

    ans2=n1*n2;

    count++;



    ans3=ans1/ans2;

    System.out.println("Answer is "+ans3);

}


查看完整回答
反对 回复 2023-05-10
?
手掌心

TA贡献1942条经验 获得超3个赞

您需要在 while 循环条件内进行输入。这是因为除非用户将他们的第一个数字输入为零,否则您的循环将永远运行。您还应该对 n2 进行某种错误检查,因为它也不能为零。如果 n2 为零,则 ans2 为零。然后 ans3 将抛出一个被零除的错误。sc,nextFloat()还应注意,由于使用 a而不是,您在原始代码中声明 n2 时出错sc.nextFloat()


这是一些代码来演示我认为您要完成的工作。


public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

     System.out.println("Enter two numbers:");

     float n1=sc.nextFloat();

     float n2=1;

     float ans1=0;

     float ans2=0;

     float ans3=0;

     int count=0;

      while(n1!=0)

     {

       n2=sc.nextFloat();

       while(n2 == 0)

       {

         System.out.println("Second number can not be zero. Enter a new number");

         n2=sc.nextFloat();

       }//End while loop for n2==0

       ans1=n1+n2;

       ans2=n1*n2;

       count++;

       ans3=ans1/ans2;

       System.out.println("Answer is "+ans3);

       System.out.println("Enter two numbers:");

       n1=sc.nextFloat();

     }//End while loop for n1

  }//End main

我个人不喜欢使用 break 语句,因为我相信它会抑制循环条件的不良做法/不良设计。对于大多数情况,您应该能够设置一个循环条件以在不进行不必要的迭代的情况下中断。然而,这仅仅是意见,我的意见与我的教授告诉我的相符。


查看完整回答
反对 回复 2023-05-10
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信