【问题标题】:Java Servlet to generate an an m by n multiplication table based on user inputJava Servlet 根据用户输入生成一个 m x n 乘法表
【发布时间】:2014-06-25 07:12:57
【问题描述】:

初学者问题。我有一个基本的 html 表单,其中包含一个标记为“输入数字”的用户输入文本框和一个标记为“创建乘法表”的提交按钮。这是使用 servlet 显示 html 格式的乘法表。其他一切正常,只是格式关闭;我似乎无法正确编号第一行和最左列。它应该是这样的:

相反,它看起来像这样(在此示例中输入数字为 7):

我的 servlet 代码是:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Main")
public class Main extends javax.servlet.http.HttpServlet implements
    javax.servlet.Servlet {
static final long serialVersionUID = 1L;

public Main() {
    super();

}

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException    {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    String title = "Multiplication Table";
    out.println("<html>");
    out.println("<head>");
    out.println("<title>" + title + "</title>");
    out.println("</head>");
    out.println("<body");

    out.println("<center>");
    out.println("<table border=1 cellpadding=0 cellspacing=0 width=70%>");

    try {
        int op = Integer.parseInt(request.getParameter("op"));
        if (op > 10) {
            out.println("<h1>Enter a number between 1 and 10!</h1>");

        } else if (op < 10) {
            for (int i = 1; i <= op; i++) {

                out.println("<tr>");
                for (int j = 1; j <= op; j++) {

                    out.println("<td>" + i * j + "</td>");
                }
                out.println("</tr>");
                System.out.println();
            }
        }
    } catch (NumberFormatException e) {
        out.println("<body><h1>Enter numbers only!</h1></body>");
    }

}
}

【问题讨论】:

    标签: java html servlets html-table multiplication


    【解决方案1】:

    我发现了一些问题。对于一个你可能不应该在 Servlet 中嵌入 HTML 的人,你也应该尝试验证你的 HTML - 你会发现一些问题。

    你没有关闭你的&lt;body标签。

    你没有关闭你的&lt;table&gt; 标签。

    您正在调用System.out.println(),您的意思可能是out.println(); 此外,您可能将标题嵌入到表格中。

    out.println("<body>"); <-- added `>`
    out.println("<center>");
    try {
        int op = Integer.parseInt(request.getParameter("op"));
        if (op > 10) {
            out.println("<h1>Enter a number between 1 and 10!</h1>");
        } else if (op < 10) {
            out.println("<table border=1 cellpadding=0 cellspacing=0 width=70%>");
            for (int i = 1; i <= op; i++) {
                out.println("<tr>");
                for (int j = 1; j <= op; j++) {
                    // EDIT
                    if (i == 1 || j == 1) {
                      out.println("<td align='right'>" + i * j + "</td>");
                      // out.println("<td style='text-align: right'>" + i * j + "</td>");
                    } else {
                      out.println("<td>" + i * j + "</td>");
                    }
                    // END EDIT
                }
                out.println("</tr>");
                out.println(); <-- out.println() - not System.out.println();
            }
            out.println("</table>"); // <-- close the table tag.
        }
    } catch (NumberFormatException e) {
        out.println("<h1>Enter numbers only!</h1>"); // <-- no <body>
    }
    out.println("</center>\n</body>"); <-- close center and body.
    

    【讨论】:

    • 更正了这些错误,但仍无法正确显示。谢谢你抓住那些,我的眼睛在交叉。
    • 现在您已经有了正确的 HTML 代码,您可能需要添加 CSS 来设置单元格的样式
    • @user2948381 已编辑以包括请求的文本对齐方式。根据您的示例,您应该在i == 1j == 1 时设置正确的对齐方式。
    【解决方案2】:

    您可以使用 CSS first-child 属性实现此目的。检查this fiddle

    【讨论】:

    • 在 HTML 表格中对齐内容的最佳解决方案是 CSS,这就是为什么我发布了包含适当 CSS 的小提琴。 IMO 这甚至不是 Java 问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2020-11-18
    • 2019-12-01
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多