Java 我的程序在do while中循环

Java 我的程序在do while中循环,java,algorithm,Java,Algorithm,我正在尝试学习Java并尝试编写小程序,但我在这方面有一个小问题,因为当我选择答案“N”时,我陷入了do-while循环 你能帮帮我吗 package calculatrice; import java.util.Scanner; public class Main { public static void main(String[] args) { Calculatrice fonction =new Calculatrice(); Scanner sr =

我正在尝试学习Java并尝试编写小程序,但我在这方面有一个小问题,因为当我选择答案“N”时,我陷入了do-while循环 你能帮帮我吗

package calculatrice;

import java.util.Scanner;

public class Main {



    public static void main(String[] args) {

    Calculatrice fonction =new Calculatrice();
    Scanner sr = new Scanner(System.in);
    boolean noury= true;
    boolean Sonia= true;
    String expression = sr.nextLine();

    while(noury)
    {
        if(expression.contains("+"))
        {

            float x = Float.parseFloat(expression.split("\\+")[0]);
            float y = Float.parseFloat(expression.split("\\+")[1]);
            float c = fonction.somme(x, y);
            System.out.println("le resultat " + c);

        }

    if(expression.contains("-"))
        {

            float x = Float.parseFloat(expression.split("\\-")[0]);
            float y = Float.parseFloat(expression.split("\\-")[1]);
            float c = fonction.soustraction(x, y);
            System.out.println("le resultat " + c);

        }

    if(expression.contains("*"))
        {

            float x = Float.parseFloat(expression.split("\\*")[0]);
            float y = Float.parseFloat(expression.split("\\*")[1]);
            float c = fonction.multiplication(x, y);
            System.out.println("le resultat " + c);

        }

    if(expression.contains("/")){

        float x = Float.parseFloat(expression.split("\\/")[0]);
        float y = Float.parseFloat(expression.split("\\/")[1]);
        float c = fonction.divion(x, y);
        System.out.println("le resultat " + c);

    }


    do{
        System.out.println("voulez vous effecteur une autre operation");
        System.out.println("O pour Oui ");
        System.out.println("N pour Non ");
        String choix = sr.nextLine();

        if ((!(choix.equals("O")))&& (!(choix.equals("N"))))
        {
            Sonia =false;
            System.out.println("La valeur saisit n'est pas Correcte veulliez choisir N ou O seulement");
         }
        else if(choix.equals("N"))
           {
            noury=false;
            }
        else
                {
            System.out.println("Entrez une nouvelle valeur à calculer");

                }
        }while(Sonia);
    }

    }

}

我不懂法语,但似乎
noury
表示外循环应该继续,而
Sonia
表示内循环应该继续。外部循环执行主逻辑,而内部循环严格地获取用户输入,因此,如果我错了,请纠正我。如果输入既不是“N”也不是“O”,则您希望再次请求输入。在“if”条件下的代码块中,您应该将
Sonia
保留为true,以便内部循环再次运行。如果输入为“N”,则表明您打算结束程序。设置
Sonia=false下的块中的code>,否则if
条件将结束内部循环,并且
noury=false已存在将导致外部循环结束。在else块下,当用户输入“O”以指示他们想要运行另一个命令时,将
Sonia
设置为false,以便内部循环结束。最后,设置
Sonia=true在内部循环之前。我相信这些步骤将提供您想要的行为。

您必须更改循环中条件(while或do/while)的评估值。 在第二个循环中,您计算的值
Sonia
,但更改的值
noury


提示:使用有意义的变量名,有助于避免此类错误。有些确实存在,例如变量(避免
Sonia
,它看起来像一个类的名称)

所以我在你的帮助下成功了 首先,我必须将
String expression=sr.nextLine()放入第一个循环中
然后我在第二个循环中做了什么sonia对false这里是我的改变

`package calculatrice;

import java.util.Scanner;

public class Main {



 public static void main(String[] args) {

 Calculatrice fonction =new Calculatrice();
 Scanner sr = new Scanner(System.in);
 boolean cond1= true;
 boolean cond2= true;


 while(cond1)
 {
   String expression = sr.nextLine();
  if(expression.contains("+"))
  {

   float x = Float.parseFloat(expression.split("\\+")[0]);
   float y = Float.parseFloat(expression.split("\\+")[1]);
   float c = fonction.somme(x, y);
   System.out.println("le resultat " + c);

     }

 if(expression.contains("-"))
  {

   float x = Float.parseFloat(expression.split("\\-")[0]);
   float y = Float.parseFloat(expression.split("\\-")[1]);
   float c = fonction.soustraction(x, y);
   System.out.println("le resultat " + c);

  }

 if(expression.contains("*"))
  {

   float x = Float.parseFloat(expression.split("\\*")[0]);
   float y = Float.parseFloat(expression.split("\\*")[1]);
   float c = fonction.multiplication(x, y);
   System.out.println("le resultat " + c);

  }

 if(expression.contains("/")){

  float x = Float.parseFloat(expression.split("\\/")[0]);
  float y = Float.parseFloat(expression.split("\\/")[1]);
  float c = fonction.divion(x, y);
  System.out.println("le resultat " + c);

 }


 do{
  System.out.println("voulez vous effecteur une autre operation");
  System.out.println("O pour Oui ");
  System.out.println("N pour Non ");
  String choix = sr.nextLine();

  if ((!(choix.equals("O")))&& (!(choix.equals("N"))))
  {
   cond2 =false;
   System.out.println("La valeur saisit n'est pas Correcte veulliez choisir N ou O seulement");
   }
  else if(choix.equals("N"))
     {
   cond1=false;
   }
  else
    {
   System.out.println("Entrez une nouvelle valeur à calculer");
      cond2 = false;
    }
  }while(cond2);
 }

 }

}`

循环将继续,直到
Sonia
为false,这仅在输入
O
N
以外的内容时才会发生。试试
X
。内部循环有什么意义?如果要一直问,直到你得到“O”或“N”,这与你所做的正好相反。旁注:所有这些嵌套的括号都是不必要的。这同样有效:
如果(!choix.equals(“O”)和(!choix.equals(“N”))
顺便说一下,一旦
Sonia
设置为false,这再也不会是真的了。你好,shmosel谢谢你的快速回答,我会试试你问的,试着让Sonia和我的循环更好Hello Daniel谢谢你的快速回答是的,你是对的,所以我问他是否愿意做其他动作,就像你说的外循环(与noury的while循环)如果用户输入“N”,程序就会结束,但是如果他输入了“O”,他可以输入新的表达式来计算。但是如果既不是“N”也不是“O”,它会要求他再次输入,而这是在do-while循环中发生的。我会试试你说的和你知道的。