首页 > 解决方案 > 需要帮助在主类中添加方法

问题描述

您好,我正在为我的 java 类做一个项目,我应该为代数导师编写一个代码,如下所示:

编写一个程序,显示一个随机生成的问题,要求用户解决 y 变量,从用户那里获取输入,如果用户回答正确则打印“正确”,否则打印“不正确”。你的主要应该给出一个问题,然后退出。使用一种或多种方法来产生这种行为。

这是关于公式 mx + b 的。所以这是我到目前为止所拥有的,并且有效!

import java.util.Random;
import java.lang.Math;
import java.util.Scanner;

class Main {
    public static void main(String[] arg){
        double min_value = -100;
        double max_value = 100;
        double m_value = (int)(Math.random()*((max_value-min_value)+1))+min_value;
        double x_value = (int)(Math.random()*((max_value-min_value)+1))+min_value;
        double b_value = (int)(Math.random()*((max_value-min_value)+1))+min_value;
        System.out.println("Given: ");
        System.out.println("m = " + m_value);
        System.out.println("x = " + x_value);
        System.out.println("b = " + b_value);
        System.out.print("What is the value of y? ");
        Scanner user_input = new Scanner(System.in);
        String user_answer = "";
        user_answer = user_input.next();
        int correct_answer = (int)m_value * (int)x_value + (int)b_value;
        if (user_answer.equals(correct_answer))
            System.out.println("You are correct!");
        else
            System.out.print("Sorry, that is incorrect. ");
        System.out.println("The answer is " + correct_answer);
    }
}

所以即使输出是正确的,我也需要将代码分解成更小的方法,这就是我对如何获取一段代码并将其放入另一个方法感到困惑的地方,一旦它运行,它也会调用该方法并给我相同的输出。我已经准备好给出的材料,但我读得越多,我就越困惑。如果有人有任何想法或建议,请让我知道任何信息将非常感激。谢谢

标签: java

解决方案


从技术上讲,您已经正确解决了问题,您正在使用一种或多种方法,但也许您尝试做的是一种常见的代码重构,称为提取方法/提取函数重构执行这种类型的重构会导致更具可读性和可维护性的代码,而且很容易做到。

作为初学者,请确定重复或看起来相似的代码,在您的情况下,以下几行看起来适合提取方法:

double m_value = (int)(Math.random()*((max_value-min_value)+1))+min_value;
double x_value = (int)(Math.random()*((max_value-min_value)+1))+min_value;
double b_value = (int)(Math.random()*((max_value-min_value)+1))+min_value;

注意每一行的 RHS 是相同的,所以我们可以用这样的方法调用替换显式代码:

double m_value = getRandomDoubleBetween(max_value, min_value);
double x_value = getRandomDoubleBetween(max_value, min_value);
double b_value = getRandomDoubleBetween(max_value, min_value);

private double getRandomDoubleBetween(double max_value, double min_value) {
     return (int)(Math.random()*((max_value-min_value)+1))+min_value;
 }

您可以识别代码的其他区域,这些区域要么包含重复,要么可能是一些难以理解的代码,如果将其提取到具有揭示代码正在做什么的名称的方法中,这些代码将更易于理解。


推荐阅读