使用toCharArray()打印所有奇数和偶数输入

时间:2015-02-19 15:02:22

标签: java arrays servlets

我希望得到用户输入上的所有奇数和偶数,然后得到所有奇数和偶数差的乘积。例如:输入字符串:dfgi456456 =';] = 34521。输出应显示用户输入中的所有奇数和偶数以及产品和差异,在这种情况下,ODD编号为:5,3,1偶数为:4,6,2产品(回答乘法)的ODD数: 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();

}

}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

以下是从字符串中提取不同数字的代码段:

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();

从该列表中,您可以遍历数字以获得您的产品/差异/无论如何。