A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张松 中级黑马   /  2013-8-9 14:39  /  1422 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张松 于 2013-8-10 10:05 编辑
  1. public static bool IsPrime(int number)
  2.         {
  3.             if (number <2)
  4.             {
  5.                 return false; ;
  6.             }
  7.             else if (number == 2)
  8.             {
  9.                 return true;
  10.             }
  11.             else
  12.             {
  13.                 for (int i = 2; i < number; i++)
  14.                 {
  15.                     if (number % 2 == 0)
  16.                     {
  17.                         return false;
  18.                     }
  19.                     else
  20.                     {
  21.                         return true;
  22.                     }
  23.                 }
  24.             }
  25.         }
复制代码
这是一个判定质数的方法,但是报错为不是所有路径多有返回值,请问漏了哪里?

12 个回复

倒序浏览
因为你用了for循环,你必须在循环外返回值,你可以在方法内定义一个局部变量,判断的时候给局部变量赋值,然后在返回
回复 使用道具 举报
本帖最后由 小天 于 2013-8-9 15:41 编辑

如果number>=2,这个函数就没有返回值,所以报错
你判断质数的方法有问题,假如用户输入15或者21这样的数的话,你的判断结果就出错了,下面是我的判断质数的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test06
{
    class Program
    {
       static int j=0;//判断这个数有几个约数,如果j=2,就是质数,如果j>2就不是质数
        public static bool IsPrime(int number)
        {
            if (number > 1)
            {
                for (int i = 1; i <= number; i++)
                {
                    if (number % i == 0)
                    {
                        j++;                       
                    }
                }
                if (j > 2)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            return false;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("请输入一个数字:");
            string str = Console.ReadLine();
            int number;
            if (int.TryParse(str, out number) == false)
            {
                Console.WriteLine("你输入的不是数字,程序结束");
            }
           bool flag= IsPrime(number);
           if (flag == true)
           {
               Console.WriteLine("这个数是质数");
           }
           else
           {
               Console.WriteLine("这个数不是质数");
           }
            Console.ReadKey();
        }
    }
}


回复 使用道具 举报
本帖最后由 sym544135698 于 2013-8-11 13:28 编辑
  1. public static bool IsPrime(int number)
  2.         {
  3.             if (number <2)
  4.             {
  5.                 return false; ;
  6.             }
  7.             else if (number == 2)
  8.             {
  9.                 return true;
  10.             }
  11.             else
  12.             {
  13.                 for (int i = 2; i < number; i++)
  14.                 {
  15.                     if (number % 2 == 0)
  16.                     {
  17.                         return false;
  18.                     }
  19.                     return true;
复制代码
}
            }
        }[/code]


以上是错误的,以下为更改
  1. static void Main(string[] args)
  2.         {
  3.             bool result;
  4.             string str = "";
  5.             int number = 0;
  6.             do
  7.             {
  8.                 Console.WriteLine("请输入一个正整数");
  9.                 str=Console.ReadLine();
  10.                 if (str == "q")
  11.                 {
  12.                     Console.WriteLine("程序结束");
  13.                     break;
  14.                 }
  15.                 try
  16.                 {
  17.                     number = Convert.ToInt32(str);
  18.                     if (number < 2)
  19.                     {
  20.                         Console.WriteLine("输入不合法,请重新输入");
  21.                     }
  22.                     else
  23.                     {
  24.                         result = ZhiShu(number);
  25.                         if (result == true)
  26.                         {
  27.                             Console.WriteLine("{0}是质数", number);
  28.                         }
  29.                         else
  30.                         {
  31.                             Console.WriteLine("{0}不是质数", number);
  32.                         }
  33.                     }
  34.                 }
  35.                 catch
  36.                 {
  37.                     Console.WriteLine("输入不合理,请重新输入");
  38.                     continue;
  39.                 }
  40.             }while(true);
  41.             Console.ReadKey();
  42.         }
  43.         public static bool ZhiShu(int number)//定义一个方法判断是否是质数
  44.         {
  45.             for (int i = 2; i < number; i++)
  46.             {
  47.                 if (number % i == 0)
  48.                 {
  49.                     return false;
  50.                 }
  51.             }
  52.             return true;
  53.         }
复制代码
好吧,就注意到个说不是全部都有返回值路径的错误,就更改,没仔细的看,失误了,抱歉。

回复 使用道具 举报 0 1
报错是因为return语句用在了for循环里,
代码稍作修改就好了:
  1.         public static bool IsPrime(int number)
  2.         {
  3.             bool boo=false;
  4.             if (number < 2)
  5.             {
  6.                 boo = false;
  7.             }
  8.             else if (number == 2)
  9.             {
  10.                 boo = true;
  11.             }
  12.             else
  13.             {
  14.                 for (int i = 2; i < number; i++)
  15.                 {
  16.                     if (number % i == 0) //此处你的代码里把 i 误写成2了,要注意啊
  17.                     {
  18.                         boo = false;
  19.                         break; //如果得到除1和自身外的第三个约数,则立即跳出循环
  20.                     }
  21.                     else
  22.                     {
  23.                         boo = true;
  24.                         //break;此处不跳出,否则无法继续判断下一个i是否是约数
  25.                    }
  26.                 }
  27.             }
  28.             return boo;
  29.         }
复制代码
回复 使用道具 举报
sym544135698 发表于 2013-8-9 15:47
}
            }
        }[/code]

请问这个方法对吗,,你+1分有没有自己测试过
回复 使用道具 举报
gb2312_8 发表于 2013-8-11 10:27
请问这个方法对吗,,你+1分有没有自己测试过

是的,我这个方法不正确,已经改过了,可是你能不能注意下你的语气,看了你的话第一感觉就是想把你给k.o了
回复 使用道具 举报
sym544135698 发表于 2013-8-11 13:30
是的,我这个方法不正确,已经改过了,可是你能不能注意下你的语气,看了你的话第一感觉就是想把你给k.o ...

哥们说话注意点
我说的是给你加一个技术分的zhangcheng5468,我没说你。
回复 使用道具 举报
gb2312_8 发表于 2013-8-12 20:50
哥们说话注意点
我说的是给你加一个技术分的zhangcheng5468,我没说你。

虽然这么说很对不起版主,不过不是对俺说的就好,不过就一个版主,也很忙的,多体谅。还有那谁,哦,gb2312_8麻烦下次一次就说明白,还有,虽然很不想承认,不过俺事先没搞的清清楚楚就在那说,那啥so sorry了。:'(
回复 使用道具 举报
sym544135698 发表于 2013-8-12 21:59
虽然这么说很对不起版主,不过不是对俺说的就好,不过就一个版主,也很忙的,多体谅。还有那谁,哦,gb23 ...

:handshake,咱就一个版主,要多体谅,以后回复代码的时候测试一下,版主+分那是相信咱,咱必须得测试,对吧。我承认我说话口气有点冲,直肠子别见外啊。
回复 使用道具 举报
gb2312_8 发表于 2013-8-13 08:47
,咱就一个版主,要多体谅,以后回复代码的时候测试一下,版主+分那是相信咱,咱必须得测试,对 ...

:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马