【问题标题】:Print all odd and even numbers input using toCharArray()使用 toCharArray() 打印所有输入的奇数和偶数
【发布时间】:2015-02-19 15:02:21
【问题描述】:

我想得到用户输入的所有奇数和偶数,然后得到所有奇数和偶数差的乘积。例如:输入一个字符串:dfgi456456=';]=34521。输出应显示用户输入中的所有奇数和偶数以及乘积和差,在这种情况下,奇数是:5,3,1 偶数是:4,6,2 乘积(乘法的答案)奇数:偶数的 15 差(减法答案):-4。请看我下面的代码。任何帮助,将不胜感激。谢谢。

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

    if (request.getParameter("stringToArray") != null) {
        char[] input = request.getParameter("stringToArray").toCharArray();
        int diffEven;
        int prodOdd;
        int i;
        for(i = 0; i <= input.length; i++){
             if( i % 2 == 0){
                 diffEven -= input;
             }
             else{
                 prodOdd *= input;
             }
        }
        out.print("<h4>All ODD numbers are: </h4>" +i);
        out.print("<h4>All EVEN numbers are: </h4>" +i);
        out.print("<h4>Product of all ODD numbers: </h4>" +prodOdd);
        out.print("<h4>Difference of all EVEN numbers: </h4>" +diffEven);
    }
    out.close();

}

}

【问题讨论】:

  • 首先,您的意思是“数字”,而不是“数字”。其次,“偶数之差为0”是怎么来的?差异不是关联操作,您应该根据差异的含义给出更具体的定义。第三,您是想在这里识别不同的数字,还是重复计数?
  • @utkuerd 是的,我的错,它们是数字,应该是不同的。我将偶数的差(减法答案)编辑为 -4(因为 4-6=-2 和 -2-2=-4)。

标签: java arrays servlets


【解决方案1】:
  1. 访问数组元素的正确方法是index[i]
  2. 数组元素是char 类型的。为了进行算术测试和计算,您应该将它们转换为int 值。 Character.getNumericValue(input[i]) 可能会有所帮助。您还应该将其测试为非负数,因为它会为非数字字符返回负值。
  3. 对于乘法部分,prodOdd 的初始值为0。因此,您所有的乘法都浪费了。您应该使用1 初始化此变量。
  4. 对于差异部分,您希望不减去第一个数字。所以你应该有一个标志或其他东西来检测输入中遇到的第一个数字。类似的东西可能会有所帮助:
 boolean firstNum = true;
    ...
    如果 ( ... ) {
        //偶数
        如果(第一个数字)
        {
            diffEven += 数字值;
            第一个数字=假;
        }
        别的
        {
            diffEven -= 数字值;
        }
    }

【讨论】:

    【解决方案2】:

    这是一个从字符串中提取不同数字的代码 sn-p:

    static IList<int> ExtractNumbers(string data)
    {
        var result = string.Empty;
        var regex = new Regex(@"\d+", RegexOptions.None);
        var matches = regex.Matches(data);
    
        foreach (Match match in matches)
        {
            result += match.Value;
        }
    
        return result
            .ToCharArray()
            .Distinct()
            .Select(x => int.Parse(x.ToString()))
            .ToList();
    }
    

    从那里,您应该能够使用 Linq 来获取您的奇数/偶数:

    var numberData = "dfgi456456=';]=34521";
    var numbers = ExtractNumbers(numberData);
    var oddNumbers = numbers.Where(x => x % 2 == 0).ToList();
    var evenNumbers = numbers.Where(x => x % 2 != 0).ToList();
    

    从该列表中,您可以遍历数字以获取您的产品/差异/其他。

    【讨论】:

    • 感谢您的回复。但问题是我们只需要在 servlet 中使用 toCharArray()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多