java - jsp(java)关于掷骰子的编码

标签 java jsp

我试图在用户输入掷骰子的数字后显示输出,但无法调用我放入鳄鱼标签中的计算(<% %>)。我该怎么做?

这是我的代码:

<body>

    <p>Note: Make sure the numbers are among the following: 4, 6, 8, 10, and 20.</p>
    <form id="diceForm" name="diceForm" action="">
    <label>Enter your number here:</label>
    <input type="number" name="dicenum" required='required' placeholder="Enter a number among 4, 6, 8, 10, and 20...">
    <br>
    <input type="submit" value="submit">
    </form>

    <% int num = Integer.parseInt(request.getParameter("dicenum")); 
    if (num == 4)
        num = 1+(int)(Math.random()*4);
    else if (num == 6)
        num = 1+(int)(Math.random()*6);
    else if (num == 8)
        num = 1+(int)(Math.random()*8);
    else if (num == 10)
        num = 1+(int)(Math.random()*10);
    else if (num == 20)
        num = 1+(int)(Math.random()*20);
    else
        num = 0;
    %>
    <%= (num == 0)? "The number you've entered is out of range.": num %>
    </body>

最佳答案

根据您的第一个请求,页面加载时没有 dicenum请求中的参数,除非您以这种方式加载页面:http://localhost:8070/../page.jsp?decinum=20手动将请求参数添加到 URL。

当用户通过<input type="submit" value="submit">提交表单时,因为您的请求类型是 GET (默认),请求参数dicenum被附加到 URL,从而形成 URL http://localhost:8070/../page.jsp?decinum=value ,其中value将替换为表单中输入的值。

因此,在第一个请求(第一页加载)中,当用户没有提交任何表单值时,没有请求参数 dicenum因此你会在这一行中得到 NullPointerException

int num = Integer.parseInt(request.getParameter("dicenum")); 

因为它解释为 Integer.parseInt(null) ,如request.getParameter("dicenum"解释为 null

您需要防范 NullPointerException,将您的 Java 语句包围在 block 中,因此如果请求参数 dicenumnull Java 不会评估包围的 block 。

 <% 
  if(request.getParameter("dicenum") != null) {
  %>  

  ... your Java statements

   <% }  %>
<小时/>

另一个观察结果是,您没有必要在 if... else blocks 中重复自己的内容。可以重写为

if (num == 4 || num == 6 || num == 10 || num == 20){
        num = 1 + (Math.random()*num);

再说一遍,这是一个公正的建议

完整的代码是:

<body>

    <p>Note: Make sure the numbers are among the following: 4, 6, 8, 10, and 20.</p>
    <form id="diceForm" name="diceForm" action="">
    <label>Enter your number here:</label>
    <input type="number" name="dicenum" required='required' placeholder="Enter a number among 4, 6, 8, 10, and 20...">
    <br>
    <input type="submit" value="submit">
    </form>

  <% 
  if(request.getParameter("dicenum") != null) {   // Opening curly braces for NPE guard
  %>  

<% 
int num = Integer.parseInt(request.getParameter("dicenum")); 

    if (num == 4 || num == 6 || num == 10 || num == 20){
        num = 1 + (Math.random()*num);
  } else {
     num = 0;
  }

%>
<%= (num == 0)? "The number you've entered is out of range.": num %>
<% } %>                         // Closing curly braces for NPE guard

</body>

关于java - jsp(java)关于掷骰子的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45416312/

相关文章:

java - 在 Java 中生成当前时间戳

javascript - 无法获取 jQuery 插件 - timepicker - 在 jsp 页面中工作

javascript - ES6 格式错误?

java - jsp:this指的是jsp页面的jave代码块<%%>中的哪个对象?

java - 泛型和类型安全 : checking dynamic binding of arguments

Java 程序从 Excel 文件读取数据抛出错误..需要帮助解决

java - 覆盖 Junit 的 jar 中存在的 spring 配置文件

javascript - 通过ajax和jsp将javascript变量保存到MySql数据库

java - JSP、HTML 和 SQL Server 连接问题

java - 如何使用 Grails 3.0 配置 PostgreSQL?