- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 java 编写一个数学测验问题,基本上会问 10 个问题,并为用户提供 2 个问题 得到正确答案的机会。该程序还提出基于基本算术的问题, 减法、除法和乘法。 我的问题是当我运行该程序时,它运行良好,但稍后在程序中它会询问相同的问题 具有相同值的问题。如何让程序每次都使用新值 c类叫什么? 我暂时留下了加、减、乘和除类。如果您需要它们,请告诉我 知道
import java.util.Scanner;
import java.math.*;
public class MathQ {
public static void main(String[] args) {
int credit = 0;
int firstTry = 0;
int secondTry = 0;
int wrong = 0;
System.out.print("What's your name?");
Scanner sc = new Scanner(System.in);
String name = sc.next();
AdditionProblem q1 = new AdditionProblem();
SubtractionProblem q2 = new SubtractionProblem();
MultiplicationProblem q3 = new MultiplicationProblem();
DivisionProblem q4 = new DivisionProblem();
System.out.println("Nice to meet you , " + name + "!");
System.out.println("**************MATH CHALLENGE*************");
System.out.println(
"This challenge will present you 10 problems in which you will have two chances to answer
the question correctly");
System.out.println(
"The questions that will be asked will be basic arithmetic ranging from addition,
subtraction, multiplication and division");
System.out.println("You will receive full credit if you answer the question correctly on the
first try");
System.out.println("You will only receive half credit if you answer it correctly on the second
try");
System.out.println("You score will be tallied at the end of the quiz");
System.out.println("Good luck!");
System.out.println("---------------------");
for (int i = 1; i <= 10; i++) {
long rand1 = Math.round((Math.random() * 4) + 1);
// System.out.println(rand1); //for testing random function
if (rand1 == 1.0) {
System.out.println("Problem #" + i);
System.out.println("----------------------------");
System.out.println(q1.getProblem());
System.out.println("Type Your Answer Below:");
Integer ans = sc.nextInt();
System.out.println("Your answer was: " + ans);
if (ans == q1.getAnswer()) {
System.out.println("That is correct!");
credit = credit + 10;
firstTry = firstTry + 1;
System.out.println("Your total points right now is: " + credit);
System.out.println();
} else {
System.out.println("-------------------------");
System.out.println();
System.out.println("Sorry that is not correct");
System.out.println("Lets try again");
System.out.println();
System.out.println(q1.getProblem());
System.out.println("Type Your Answer:");
Integer ans1 = sc.nextInt();
if (ans1 == q1.getAnswer()) {
System.out.println("There ya go..good answer");
System.out.println("Lets move on");
credit = credit + 5;
secondTry = secondTry + 1;
System.out.println("You total points thus far is: " + credit);
} else {
System.out.println();
System.out.println("Hmmmm.sorry thats still not correct");
System.out.println("The correct answer was: " + q1.getAnswer());
wrong = wrong + 1;
System.out.println("You have " + credit + " points");
System.out.println("Lets continue on!");
System.out.println();
System.out.println("-------------------------");
}
}
最佳答案
我假设您发布的 psvm 包含实际代码。如果不是这种情况,请帮我填补空白。
代码示例存在多个问题,我将一一解决。
您有 4 个本地属性 q1-q4 以及 4 个不同的实例。根据代码,我看到每个类都包含一个问题和一个答案。这已经将您限制为最多 4 个问题。您无法回答 10 个不同的问题。
要解决这个问题,您必须重新考虑您的方法。我现在不会过度讨论 OO-Aspect,因为这似乎不是您的目标。首先,我们必须修复您的“静态”局部变量,并添加一些实用程序来启用您的动态问题。假设您不太关心类型的分布(添加等),我们可以从主类中删除这种分离。因此,我们添加一个新类(称为ProblemFactory)和一个接口(interface)(称为Problem)。您的 4 个类实现了问题。
public final class ProblemFactory {
public static Problem createProblem(){
long random = Math.round((Math.random() * 4) + 1);
switch(random) {
case 1:
return new AdditionProblem();
case 2:
return new SubtractionProblem();
...
}
}
public interface Problem {
public String getProblem();
public String getAnswer();
}
在主类中,将 Math.random() 行替换为
Problem problem = ProblemFactory.createProblem();
主类中不再需要 if(rand1 == 1.0),并且可以删除除其中一个之前的 if-else block 之外的所有内容。 q1-q4 被新的问题变量替换。
现在您需要对 4 个问题类别进行最后一次更改。我假设你有某种类型的 map ,其中有 2 个字符串,其中键是问题,值是答案。如果是这种情况,您的类(class)可能如下所示
public class AdditionProblem(){
private static Map<String, String> questions = createQuestions();
private String problem;
private String answer;
private static Map<String, String> createQuestions() {
Map<String, String> questions = new HashMap();
questions.put("24 + 36 + 10", "70");
//add as many more as you desire, but at least 10 total
return questions;
}
public AdditionProblem(){
//we first get the number of available questions
int numberOfQuestions = questions.size();
//we now generate a random again to choose which question to pick
long random = Math.round((Math.random() * numberOfQuestions) + 1);
//We pull they keySet from the map and use the random number as index, this is our question now
problem = questions.keys().get(random);
//we use the question to pull the answer
answer = questions.get(problem);
//as our last step, we remove the question from the list, so it is not pulled again
questions.remove(problem);
}
public String getProblem(){
return problem;
}
public String getAnswer(){
return answer;
}
}
通过这些更改,您可以在每次循环迭代时创建一个新的问题对象。你不知道,也不关心,它是什么类型的算术函数,你只知道它是这 4 种函数中的任何一种,而且总是一个新问题。现在您唯一需要确保的是,当您希望测验中有 10 个问题时,每堂课至少有 10 个问题。否则你最终会遇到异常。
关于java - 从另一个类调用类时尝试获取新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60053094/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!