当前位置: 首页 > 知识库问答 >
问题:

另一个问题与做..而

滑骞尧
2023-03-14

我用Java重写了我的第一个程序,现在它看起来像这样:

import java.util.*;
import static java.lang.Math.*;

public class FirstApp {
public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    double a = 0;
    double b = 0;
    double c = 0;
    double delta;
    double x1 = 0, x2 = 0;
    boolean repeat = false;
    boolean decision = false;


    System.out.println("Calculator 2.0");
    System.out.println("Bartosz Kubacki 6.10.2016");
    System.out.println("-------------------------------");
    System.out.println("Welcome in Calculator 2.0 which helps you solve Ax^2 + Bx + C = 0.");

    do
    {
        do 
        {
            System.out.println("Enter A param (different from 0: ");

            if(input.hasNextDouble())
            {
                a = input.nextDouble();
                if(a == 0)
                {
                    System.out.println("Param A needs to be different from 0!");
                }   
            } else
            {
                input.nextLine();
                System.out.println("Param A must be a number!");
            }
        } while(a == 0);

        do
        {
            System.out.println("Enter B param: ");

            if(input.hasNextDouble())
            {
                b = input.nextDouble();
                repeat = false;
            } else
            {
                input.nextLine();
                System.out.println("Param B must be a number!");
                repeat = true;
            }
        } while(repeat);

        do
        {
            System.out.println("Enter C param: ");

            if(input.hasNextDouble())
            {
                c = input.nextDouble();
                repeat = false;
            } else
            {
                input.nextLine();
                System.out.println("Param C must be a number!");
                repeat = true;
            }
        } while(repeat);

        // Counting.. and showing results

        delta = pow(b, 2) - (4 * a * c);
        if(delta == 0)
        {
            x1 = (0 - b) / 2 * a;
            System.out.printf("There is one solution: %.2f\n", x1);
        } else if(delta > 0)
        {
            x1 = ((0 - b) - sqrt(delta)) / 2 * a;
            x2 = (b + sqrt(delta)) / 2 * a;
            System.out.printf("There are two solutions: %.2f and %.2f\n", x1, x2);
        } else
        {
            System.out.println("There is no solution.");
        }

        // Decyzja o kolejnych działaniach

        do
        {
            System.out.println("Want make another eqation? [Y/N] ");
            String dec = null;

            if(input.hasNext("Y") || input.hasNext("N") || input.hasNext("y") || input.hasNext("n"))
            {
                dec = input.nextLine();
                if(dec.equalsIgnoreCase("Y"))
                    decision = true;
                else
                    decision = false;

                repeat = false;
            } else
            {
                input.nextLine();
                repeat = true;
            }
        } while(repeat);
    } while(decision);

    input.close();
}
}

实际上一切都很顺利,除了:

>

  • 当我在输入a、B和C的值时输入一个非数字类型时,会显示一个双重警告,然后它就会正常工作。(仅1个警告)

    当我回答Y或N时,程序终止,但如果我输入任何其他内容,如“g”、“2”或“w”等,程序会再次询问我(第一次也是两次),然后当我输入Y或N,它工作得很好。

    我真的不知道这是怎么回事,因为在编译过程中没有警告或错误。

    感谢所有答案。:)

  • 共有1个答案

    上官修文
    2023-03-14
    // Decyzja o kolejnych działaniach
                String dec = null;
                input.nextLine();
                do
                {
                    System.out.println("Want make another eqation? [Y/N]: ");
    
                    dec = input.nextLine();
    
                    if(dec.equalsIgnoreCase("Y")) {
                        decision = true;
                        repeat = false;
                    }
                    else if(dec.equalsIgnoreCase("n")){
                        decision = false;
                        repeat = false;
                    } else
                        repeat = true;
                } while(repeat);
    

    我已经根据需要编辑了你的代码。我个人不会这样编码,但我宁愿做最小的更改。

    你上一个循环每次循环时都会制作一个新的 String dec。这没关系,但不推荐。我把它移到了循环的上方。

    我还必须在循环之前获取输入,以防止它出错。里面肯定有一些剩菜。

    然后,我删除了您的< code>hasNext()条件,只读取输入,因为他们要输入什么并不重要,您只需要关心它是< code>Y还是< code>N,我添加了适当的< code>if语句。

    那就行了。像它应该的那样工作。

     类似资料:
    • 这是哲学家进餐问题的另一个实现,这是家庭作业问题,我将在这里展示我迄今为止所做的尝试: 大部分的代码是准备好的,除了和方法需要改变,我所做的就是添加这个: 和 我知道这不是线程安全的,这个链接也保证了这一点。真正的神话是老师希望我们使用lock来解决这个问题,我可以在和中锁定/解锁互斥锁,锁定和解锁两个锁(choppestick[philosopherNumber].lock();和筷子[(哲学家

    • 问题内容: 我有以下课程: 我有 为什么以下原因导致错误: 有任何想法吗? 问题答案: 对Java泛型的引用很好(jdk site )。 确实,@ Oli_Charlesworth提供了一个很好的答案,但也许这个答案会更完整。 在中,您不能插入任何正确的内容。 如果你有 和 然后,是两者的超类型: 因此写一些像这样的声明是合法的 这确实是通配符表示法存在的原因。 但是,这里的事情变得越来越有趣:

    • 尝试从同一命名空间中的另一个服务连接到一个服务。使用ClusterIP创建服务。创建服务后使用该Ip访问服务。请求有时成功,有时失败,我看到两个pod都启动并运行。以下是服务配置

    • 我知道Apache Cassandra的这种问题已经有一段时间了,例如:Pentaho帧大小(17727647)大于最大长度(16384000)!和thrift _ max _ message _ length _ in _ MB未识别卡桑德拉 但是我的问题有点不同。我使用Cassandra v2.0.7,我想将Pentaho Kettle(5.1)的数据插入Cassandra。我必须启用加密(S

    • 问题内容: 我正在尝试在do while循环中发送多个帖子,但未添加结果 输出为:5、5、5、5、5, 我需要的输出是:1、2、3、4、5 问题答案: 由于AJAX的异步特性,当您的成功函数针对任何产生的AJAX请求运行时,循环已完成并将其设置为5。您需要捕获每个请求开始时的状态并使用捕获的状态方法中的状态。关闭值是最简单的方法: 但是,请理解,一个或多个请求可能会挂在服务器上,从而使后一个请求先

    • 问题内容: [注:]我正在浏览问题页面,真的对“ DIVS vs表”,“何时使用表vs DIVS”,“ Divs比表更好”,“ Tables vs CSS”以及所有问 相同 的问题感到厌倦 天哪, 但我想看看人们如何处理“为什么要放弃并使用表格”这一典型例子的翻译: 问题: 如何最好地(有意义地,简单地,稳健地,流畅地,可移植地)实现没有表的上述内容。对于初学者,我猜想一个幼稚的实现会在第一列中使