首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示1到100之间的数字,不带循环或条件

显示1到100之间的数字,不带循环或条件
EN

Stack Overflow用户
提问于 2010-01-12 02:42:01
回答 45查看 99.4K关注 0票数 33

有没有一种方法可以打印从1到100的数字,而不使用任何循环或像"if“这样的条件?我们可以很容易地使用递归,但这同样有一个if条件。有没有办法也不用"if“呢?此外,没有重复的print语句,或者包含从1到100的所有数字的单个print语句。

用Java编写的解决方案更可取。

EN

回答 45

Stack Overflow用户

回答已采纳

发布于 2010-01-12 02:51:01

伪代码。使用数组在100个元素之后强制执行异常,该异常被捕获且不执行任何操作。

代码语言:javascript
复制
function r(array a, int index){
    a[index] = a[index-1]+1
    print a[index]
    r(a, index+1)
}

try{
    array a;
    a.resize(101)
    r(a, 1)
}catch(OutOfBoundsException){
}

编辑

Java代码:

代码语言:javascript
复制
public void printTo100(){
    int[] array = new int[101];
    try{
        printToArrayLimit(array, 1);
    }catch(ArrayIndexOutOfBoundsException e){
    }
}
public void printToArrayLimit(int[] array, int index){
    array[index] = array[index-1]+1;
    System.out.println(array[index]);
    printToArrayLimit(array, index+1);
}
票数 48
EN

Stack Overflow用户

发布于 2010-01-12 03:14:54

了解你的库。

代码语言:javascript
复制
public class To100 {
    public static void main(String[] args) {
        String set = new java.util.BitSet() {{ set(1, 100+1); }}.toString();
        System.out.append(set, 1, set.length()-1);
    }
}

(您可以使用String.replaceAll更改分隔符。例如,用于空格分隔的.replaceAll(", ", " ")。)

解释:

  • java.util.BitSet是一个方便的小类,它表示一个任意大的(非稀疏的)正整数集。(它确实有很多不好的地方:不是最终版本,不必要的线程安全,不支持很好的构建,等等)ta。
  • 扩展了BitSet,允许我只写一次java.util。JDK7的“菱形运算符”应该有助于减少泛型类型的重复,但对于更常见的情况无济于事。:(
  • 双花括号是Double Brace idiom -一个只包含实例初始化器的匿名内部类。这是一个黑客行为。它增加了运行时大小,从而增加了启动时间。如果使用pack200.gz,则分发大小可以忽略不计。我认为现代世界已经为它做好了准备。你的同事可能不是。也许可以用它来测试集合中的一些集合(“da
  • BitSet.set”这个词有两种完全不同的含义--我喜欢它)。这是一个半开放的范围-顶部的值不包括;底部的包含。将1加到顶部以包含100。
  • BitSet.toString实际上是由接口定义的,docs.
  • append是在PrintStream 5.0中引入Appendable接口时添加到J2SE中的。它本质上是执行子字符串并打印结果。(一个小秘密:规范实际上并不保证这会刷新输出,但实现总是会这样做。)
  • 从1开始追加,去掉1的长度就从BitSet.
  • "Know库的字符串表示中去掉了大括号。取自乔什·布洛赫。请参阅Java Puzzler,难题94。了解库中的内容真的很好。至少知道该去哪里找。节省您的时间,节省维护时间,并在第一时间获得正确的结果。
票数 177
EN

Stack Overflow用户

发布于 2010-01-12 03:10:52

在任何安全的情况下都不要这样做!

代码语言:javascript
复制
public class Fail {

    public void thisFails(int x){
        System.out.println(x);
        Integer[] bigArray = new Integer[9450];
        thisFails(x+1);
    }

    public static void main(String[] args) {
        Fail failure = new Fail();
        failure.thisFails(1);
    }
}

当使用1m的堆空间运行时(java -Xmx1m失败),它将在第100次递归时用完堆。

..。

我现在要去洗手了。

票数 119
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2044033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档