0

以下のコードでは、3 列目から発生する例外を返しています。例外の発生を防ぐために、このロジックを記述するより良い方法はありますか? これは発生している例外です: (#2):java.lang.ArithmeticException: / by zero による原因

問題の原因と思われるコードは次のとおりです。つまり、すべての顧客が「0」より大きい数値を示しているため、最初のステートメントが使用されます。「0」として戻ってくる、otherwise ステートメントに含まれている顧客がいる場合があります。したがって、モジュラスを使用すると、数値を「0」で除算できないため、例外がスローされます。この声明を書くより良い方法は何でしょうか?

<c:choose>
       <c:when test="${total%columns != 0}">
           <c:set var="columnL" value="${total/columns + 1}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:when>
       <c:otherwise>
           <c:set var="columnL" value="${total/columns}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:otherwise>
   </c:choose>

リクエストごとに追加される DEBUG: 1. ${Total%columns != 0}
2. ${Total/columns + 1}
3. ${Total/columns}

デバッグが追加され、1 つのセクションが次のように返されます: 1. true、2. 11.333333333333334、3. 10.333333333333334

別のセクションが次のように戻ってきました:(これが問題の原因です) 1.false、2.9.0、3.8.0

お気づきのように、例外を引き起こしている 2 つの間で浮動小数点数が生成されているようです。

これは完全なコードの概要です。

<dsp:page>

   <c:set var="total" value="${fn:length(customers)}"/>
   <c:set var="columns" value="3"/>
   <c:set var="cCount" value="1"/>
   <c:choose>
       <c:when test="${total%columns != 0}">
           <c:set var="columnL" value="${total/columns + 1}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:when>
       <c:otherwise>
           <c:set var="columnL" value="${total/columns}"/>
           <c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
       </c:otherwise>
   </c:choose>

   <c:forEach begin="1" end="${columns}" var="cCount" varStatus="status">
   <c:set var="begin" value="${(cCount -1) * columnL}"/>
   <c:choose>
       <c:when test="cCount == columns">
           <c:set var="end" value="${total - 1}"/>
       </c:when>
       <c:otherwise>
           <c:set var="end" value="${(cCount) * columnL - 1}"/>
       </c:otherwise>
   </c:choose>
       <div id="dColumn${cCount}" class="dCol">
       <c:set var="cCount" value="${cCount+1}"/>
       <c:forEach items="${customers}" begin="${begin}" end="${end}" var="customer"    varStatus="status">
       <div class="link">
               <nm:a href="${customer.templateURL}">
                   <dsp:param name="param1" value="${customer.id}" />
                   <dsp:param name="param2" value="${customer.parentId}" />
                   <dsp:param name="param3" value="${customer.masterId}" />

               </nm:a>
           </div>
       </c:forEach>
       </div>
   </c:forEach>
   </dsp:page>
4

0 に答える 0