虽然循环对偶数/奇数不正常

时间:2013-12-15 19:01:54

标签: java while-loop set

我的任务是创建一个方法,如果我的整数集中包含非偶数,则返回true。我的问题是,即使我的集合中有非偶数,它也会返回false。我在哪里犯了错误?

import java.util.*;
public class Chapter_11_E9
{   


    public static boolean odd;
    public static boolean hasOdd(Set<Integer> tSet1)
    {
        Iterator<Integer> itr = tSet1.iterator();

            while (itr.hasNext())
            {
                int current = itr.next();
                if ((current / 2) == 1)
                {
                    odd = true;
                }
                else
                {
                    odd = false;
                }
            }
        return odd;
    }

    public static void main(String[] args)
    {
        Set<Integer> tSet1 = new HashSet<Integer>();
        tSet1.add(6);
        tSet1.add(2);
        tSet1.add(5);
        tSet1.add(4);
        tSet1.add(12);
        tSet1.add(6);
        tSet1.add(14);
        System.out.println(tSet1);      
        System.out.println(hasOdd(tSet1));
    }
}

3 个答案:

答案 0 :(得分:2)

这一行:

        if ((current / 2) == 1)

应该是:

        if ((current % 2) == 1)

/用于潜水,而%用于获得余额。此外,您的方法逻辑已关闭。假设你在集合中有多个赔率和平均值,你可能会得到错误的结果。我建议这样做:

public static boolean hasOdd(Set<Integer> tSet1)
{
    Iterator<Integer> itr = tSet1.iterator();

        while (itr.hasNext())
        {
            int current = itr.next();
            if ((current % 2) == 1)
            {
                //odd = true;
                return true;//once you find the odd, just return
            }
            //else
            //{
            //    odd = false;
            //}
        }
    //return odd;
    //if you're done iterating, that means it never found an odd so return false
    return false;
}

一旦你在集合中发现了一个奇数,那么你的情况就是如此。一旦你完成整个集合的循环,那么你知道可能没有任何可能性,所以只返回false。

注意:提及用户 ZouZou 时,如果您想处理否定关键字,请使用:

current%2 != 0

答案 1 :(得分:0)

您需要在第一次获得奇数值时返回(如果最后一项是奇数,您将只返回true。)

public static boolean hasOdd(Set<Integer> tSet1)
{
  Iterator<Integer> itr = tSet1.iterator();
  while (itr.hasNext())
  {
    int current = itr.next();
    if ((current % 2) != 0) // Check for odd, by computing the modulo 2 of the #.
    {
      return true;          // stop, there is an odd value.
    }
  }
  return false;             // checked all the values... none are odd.
}

答案 2 :(得分:0)

我会在这里使用for-each循环

public static boolean hasOdd(Set<Integer> set) {
  for (Integer current : set) {
    // Check for odd, by computing the modulo 2 of the #.
    if ((current % 2) != 0) {
      // stop, there is an odd value.
      return true;
    }
  }
  // checked all the values... none are odd.
  return false;
}