黑马程序员技术交流社区

标题: 一道面试题 [打印本页]

作者: fsociety    时间: 2015-11-26 20:07
标题: 一道面试题
本帖最后由 fsociety 于 2015-11-26 20:09 编辑

要求:输出1-200(不能使用循环和if语句)
不要和我说200条print哈...

作者: Phy_zhang    时间: 2015-11-26 20:15
既然没办法用循环那么就用递归的思想!
public class Test
{
     
    public static void main(String[] args)
    {
       int i =1;
       printI(i);
    }
    private void printI(int i)
    {
       System.out.println(i);
       i++;
       if(i>200)
          return;
       else
          printI(i);
        
    }
}
作者: fsociety    时间: 2015-11-26 20:27
Phy_zhang 发表于 2015-11-26 20:15
既然没办法用循环那么就用递归的思想!
public class Test
{

说好不能用if的
作者: Phy_zhang    时间: 2015-11-26 20:33
fsociety 发表于 2015-11-26 20:27
说好不能用if的

其实递归也是循环的一种,如果按照你这样说的话,我真的不知道用什么办法了....
坐等大神把!
作者: fsociety    时间: 2015-11-26 20:42
Phy_zhang 发表于 2015-11-26 20:33
其实递归也是循环的一种,如果按照你这样说的话,我真的不知道用什么办法了....
坐等大神把! ...

之前我也是想着用递归的  但是递归之后还是要判断才能结束  
作者: Phy_zhang    时间: 2015-11-26 20:44
fsociety 发表于 2015-11-26 20:42
之前我也是想着用递归的  但是递归之后还是要判断才能结束

递归当然要有判断啦
递归如果没有判断的话其实就跟一个死循环没什么区别
作者: fsociety    时间: 2015-11-26 20:49
Phy_zhang 发表于 2015-11-26 20:44
递归当然要有判断啦
递归如果没有判断的话其实就跟一个死循环没什么区别 ...

对了   可以试试用异常
作者: 13277988289    时间: 2015-11-26 21:19
水平有限没想到解决方案,等大神吧!
作者: 队长别开枪是我    时间: 2015-11-26 21:23
确实有难度,小白路过
作者: 橘子果酱    时间: 2015-11-26 21:28
  1. public class huoqu1_200 {

  2.         public static void main(String[] args) {
  3.                 int i = 1;
  4.                 print(i);
  5.                
  6.         }
  7.         public static void print(int i) {
  8.                 try {
  9.                         System.out.println(i);
  10.                         int a = i / (i - 200);
  11.                         print(i == 200 ? i : ++i);
  12.                 } catch (Exception e) {
  13.                         System.out.println("输出完毕");
  14.                 }
  15.                
  16.         }

  17. }
复制代码

作者: 小笨笨天    时间: 2015-11-26 21:40
楼上叼  顶
作者: Weidan    时间: 2015-11-26 22:36
橘子果酱 发表于 2015-11-26 21:28

i == 200 ? i : ++i这个不是算判断么
作者: 橘子果酱    时间: 2015-11-26 23:05
Weidan 发表于 2015-11-26 22:36
i == 200 ? i : ++i这个不是算判断么

是判断   三元运算符呀
作者: 小地瓜    时间: 2015-11-26 23:24
采用递归思想:
  1. public class Demo {

  2.         public static void main(String[] args) {
  3.                 fun(200);

  4.         }
  5.         public static int fun(int num){
  6.                 System.out.println(num);
  7.                 return num == 1 ? 1 : 1 + fun(num-1);
  8.         }

  9. }
复制代码


作者: bbaijiajinger    时间: 2015-11-26 23:27
用方法嵌套行不
作者: 劲爆对策    时间: 2015-11-26 23:44

TimerTask task=
        new TimerTask(){
                int i=0;
                @Override
                public void run() {
                        if(i>200)System.exit(0);
                        System.out.println(i++);
                       
                }};
//定时器
new Timer().schedule(task, 1, 1);
作者: Phy_zhang    时间: 2015-11-27 09:00
橘子果酱 发表于 2015-11-26 21:28

同样也是递归思想,不过用的是异常来退出递归,在下甘拜下风
作者: Phy_zhang    时间: 2015-11-27 09:10
小地瓜 发表于 2015-11-26 23:24
采用递归思想:

够简洁,我喜欢
作者: MRguo    时间: 2015-11-27 14:13
本帖最后由 MRguo 于 2015-11-27 14:15 编辑
Weidan 发表于 2015-11-26 22:36
i == 200 ? i : ++i这个不是算判断么

三元运算符 判断语句
作者: 黑夜中那颗星    时间: 2015-11-27 14:47
主要还是利用异常,我这里是利用数组角标越界异常
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 int[] arr = new int[200];
  4.                 printNum(1,arr);
  5.         }
  6.         public static void printNum(int num,int[] arr){
  7.                 try{
  8.                         System.out.println(num);
  9.                         arr[num]=0;
  10.                         printNum(++num,arr);
  11.                 }
  12.                 catch(ArrayIndexOutOfBoundsException e){
  13.                        
  14.                 }
  15.         }
  16. }
复制代码

作者: Weidan    时间: 2015-11-27 15:05
橘子果酱 发表于 2015-11-26 23:05
是判断   三元运算符呀

{:3_46:}好吧
作者: Weidan    时间: 2015-11-27 15:06
MRguo 发表于 2015-11-27 14:13
三元运算符 判断语句

好吧 看着题目说if语句 就想着 这个应该算是简写if吧...
作者: 橘子果酱    时间: 2015-11-27 15:32
Weidan 发表于 2015-11-27 15:06
好吧 看着题目说if语句 就想着 这个应该算是简写if吧...

能用三元运算符写的 也能用if写  但是反过来就不行了
作者: Weidan    时间: 2015-11-27 15:34
橘子果酱 发表于 2015-11-27 15:32
能用三元运算符写的 也能用if写  但是反过来就不行了

对对对 没错 学习了 {:3_46:}
作者: zhangguohui    时间: 2015-11-27 16:03
666666666666666666666
作者: wyasln    时间: 2015-11-27 16:31
有个帖子里看过,用捕获异常判断结束,用递归方法打印
作者: jiangshicun007    时间: 2015-11-27 17:09
这种帖子不错
作者: mark_time    时间: 2015-11-27 18:32
橘子果酱 发表于 2015-11-26 21:28

好厉害,受教了,大神抱大腿
作者: yubail    时间: 2015-11-27 19:11
谢谢分享
作者: 小地瓜    时间: 2015-11-27 22:18
Phy_zhang 发表于 2015-11-27 09:10
够简洁,我喜欢

呵呵,一起探讨
作者: xiaoziyk    时间: 2015-11-27 23:51
应该可以用递归,一会写一下试一试
作者: 米阳SOHO    时间: 2015-12-2 23:45
package PrintTest;
/*
* 输出1-200,不能用循环,不能用if
*/
public class Test2 {

        public static void main(String[] args) {
                fun(1);

        }
        public static int fun(int num) {
                System.out.println(num);
                return num == 200 ? 200 : 1 + fun(num + 1);
        }

}
作者: 隔壁马良    时间: 2015-12-3 00:43
小地瓜 发表于 2015-11-26 23:24
采用递归思想:

牛妹纸!!!
return num == 1 ? 1 : 1 + fun(num-1);
为什么不写成这样
return num == 1 ? 1 :  fun(num-1);
作者: bukai123    时间: 2015-12-3 11:35
那就递归,和3目运算符了
作者: not@good@enough    时间: 2015-12-3 12:12
啥是递归。不懂。。。还没学
作者: 蔡泽杰    时间: 2015-12-3 12:25
楼上的都好厉害,学习拉
作者: ゞ神说    时间: 2015-12-3 14:11
路过,学习
作者: ToSina    时间: 2015-12-3 18:50
神马都是浮云  谢谢分享
作者: 断魂oo血狼    时间: 2015-12-3 20:11
受教了, 20楼数组越界异常想法真的厉害 膜拜
作者: lts0616    时间: 2015-12-3 20:16
有点难度, 受教了
作者: 雨来    时间: 2015-12-3 21:24
说实话没有意思, 这样的题目真的可以煅炼我们的逻辑思维能力吗?
作者: Little_jie    时间: 2015-12-3 21:51
用三元运算符,或者数组
作者: remix7    时间: 2015-12-3 21:55
只懂得用IF的渣渣路过
作者: xuao277457401    时间: 2015-12-3 22:01
表示根本不懂。。。。。。
作者: 八宝    时间: 2015-12-3 22:10
长姿势啦 可以用异常退出
作者: 八宝    时间: 2015-12-3 22:11
橘子果酱 发表于 2015-11-26 21:28


作者: 浅岁时光    时间: 2015-12-3 22:34
都会的好多啊   好有压力
作者: yqlbd    时间: 2015-12-3 22:42
太厉害了,膜拜
作者: ^_^笨和尚^_^    时间: 2015-12-3 23:02
原来这也能用其他的办法实现啊,看来目前的基础确实太渣了,惭愧啊
作者: 海划时代    时间: 2015-12-5 15:39
都比较厉害!赞
作者: 胖小子    时间: 2015-12-6 11:58
递归,写一个方法 一直递归,直到 等于200,就结束呗
作者: jiuyeban    时间: 2015-12-6 12:21
涨势是喳喳喳喳
作者: 1379号监听员    时间: 2015-12-6 13:04

  1. <P>public class Demo {
  2.       public static void main(String[] args) {
  3.           int i = 200;
  4.           fun(i);
  5.           }

  6.        private static int fun(int i) {
  7.              System.out.println(i);
  8.             return i == 0 ? 0 : fun(--i);
  9.              }</P>
  10. <P>}
  11. </P>
复制代码


作者: 回归原点521    时间: 2015-12-6 14:20
小地瓜 发表于 2015-11-27 22:18
呵呵,一起探讨

public class DiZheng {

        public static void main(String[] args) {
                fun(200);

        }
        public static int fun(int num){
             System.out.println(num);
                return num == 1 ? 1 : fun(num-1);
               
        }

}
稍微改一下,因为运行了一下,那个1+fun(num-1)  可以直接写成fun(num-1)
作者: 洪志豪1994    时间: 2015-12-6 19:52
新人路过,看大神编写
作者: liuzhipeng    时间: 2015-12-6 20:53
橘子果酱 发表于 2015-11-26 21:28

你的思想太强悍了
作者: 嘿嘿嘿嘿嘿    时间: 2015-12-6 21:09
对于一个初学者,看到这里,我想说,心好累!
作者: 仙风道骨    时间: 2015-12-6 21:28
好屌学习了
作者: fsociety    时间: 2015-12-18 12:38
雨来 发表于 2015-12-3 21:24
说实话没有意思, 这样的题目真的可以煅炼我们的逻辑思维能力吗?

你想想异常跳出循环
作者: ___    时间: 2015-12-18 12:50
原来是这个样子的啊
作者: huaduwuzhe    时间: 2015-12-18 13:43
楼上都是高手啊
作者: yangzelin    时间: 2015-12-18 21:26
没学好,一开始我还没想到
作者: ROSSIN    时间: 2015-12-18 21:31
好腻害。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2