- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我想说这是我的第一篇帖子,虽然我从未在 StackOverflow.com 上发过帖子,但这里的人帮了我很多,我希望我能回去并为所有的 +1对我有帮助的帖子。
话虽这么说,我在算法课上分配了一个作业,我必须递归地将数字 1 到 1,000,000 转换为它们的单词计数部分。
例如从 1 到 1,000,000
one
two
three
...and so on...
one hundred and ninetyseven
one hundred and ninetyeight
one hundred and ninetynine
two hundred
...and so on...
nine hundred and ninetynine thousand nine hundred and ninetyeight
nine hundred and ninetynine thousand nine hundred and ninetynine
one million
我的代码运行到 8,980,只是运行到 10,000 进行测试,但随后我遇到了 Stack Overflow。我不确定 JVM 是否只留出足够的内存来运行到 8,980,或者它是否在我的代码中。我在下面写了条件的分解,并在下面粘贴了完整的代码。
public class Numbers {
private final String HUNDRED = " hundred ";
private final String THOUSAND = " thousand ";
private String[] zeroToNineteen = { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
private String[] twentyToOneHundred = { "", "", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };
以下递归方法是我数字类中唯一的方法。
public void toOneMillion(int n) {
String number = Integer.toString(n);
String newNumber = "";
我首先通过 Integer.toString(n)
将字符串 number
设置为参数 n
。
然后在每个条件语句中,我找出序列中的第一个数字,然后使用该数字将字符串 newNumber
设置为正确数组中的索引值。
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))] + THOUSAND;
之后,我将 newNumber
打印到控制台,然后从 number
中删除第一个数字,让它下降到下一个条件。
System.out.print(newNumber);
number = number.substring(1, 4);
然后我重复此步骤,直到数字落在 0 到 100 之间。然后我将数字打印到控制台并进行递归调用 toOneMillion(n+1);
直到 n
等于 10,000(用于测试目的)。
我想我的问题是,是否可以在不遇到 stackoverflow 的情况下实现 1 到 1,000,000?此外,如果您在我的代码中看到不应该存在的内容或可以以更有效的方式编写的代码(我知道整个事情可以以更有效的方式编写,我只是想知道更小的事情)可以你指出来也许解释一下?非常感谢您阅读到这里,也感谢您提供的任何帮助。
我有一个主类,它创建数字类的实例并通过 - numbers.toOneMillion(1)
...调用递归方法,这是我的项目文件夹中唯一的其他类,所以这是有问题的类(class)。
public class Numbers {
private final String HUNDRED = " hundred ";
private final String THOUSAND = " thousand ";
private String[] zeroToNineteen = { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve",
"thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
private String[] twentyToOneHundred = { "", "", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };
public void toOneMillion(int n) {
String number = Integer.toString(n);
String newNumber = "";
if (n == 10000) {
System.out.println("10000");
} else if (n > 0) {
if (n >= 100) {
if (n >= 1000) {
if (n % 1000 == 0) {
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))] + THOUSAND;
System.out.print(newNumber);
number = number.substring(1, 4);
} else {
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))] + THOUSAND;
System.out.print(newNumber);
number = number.substring(1, 4);
// System.out.println("HELLO!" + number + " " + n);
}
}
if (Integer.parseInt(number) != 0) {
if (n % 100 == 0) {
if(zeroToNineteen[Integer.parseInt(number.substring(0, 1))].equals("")) {
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))];
System.out.print(newNumber);
number = number.substring(1, 3);
} else {
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))] + HUNDRED;
System.out.print(newNumber);
number = number.substring(1, 3);
}
} else {
if(zeroToNineteen[Integer.parseInt(number.substring(0, 1))].equals("")) {
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))] + "and ";
System.out.print(newNumber);
number = number.substring(1, 3);
} else {
newNumber = zeroToNineteen[Integer.parseInt(number.substring(0, 1))] + HUNDRED + "and ";
System.out.print(newNumber);
number = number.substring(1, 3);
}
// System.out.println("HELLO!" + number + " " + n);
}
}
}
if (Integer.parseInt(number) < 20) {
System.out.println(zeroToNineteen[Integer.parseInt(number)]);
toOneMillion(n + 1);
} else {
if (n % 10 == 0) {
number = number.substring(0, 1);
newNumber = twentyToOneHundred[Integer.parseInt(number)];
System.out.println(newNumber);
toOneMillion(n + 1);
} else {
newNumber = twentyToOneHundred[Integer.parseInt(number
.substring(0, 1))];
newNumber += zeroToNineteen[Integer.parseInt(number
.substring(1))];
System.out.println(newNumber);
toOneMillion(n + 1);
}
}
}
}
}
我意识到我的代码很困惑,我应该将所有条件分解为一个方法,为每个条件处理相同的事情,我只想先让代码工作,然后再完善它。此外,我几乎肯定有一种更有效的方法来做我想做的事情,但是我的大脑和思维过程想出了这个,所以不要讨厌努力。
最佳答案
我觉得您误解了他们期望递归的位置。
更多地按照以下思路思考:
for(int i=0; i<100000; i++){
printNumberRecursively(i);
}
其中 printNumberRecursively
一次递归地遍历一个数字。
如果我错了,那么这个作业就是荒谬的。
关于java - 以Word形式递归打印1到1,000,000,stackoverflowexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983441/
有没有更好的方法用 PHP 将数据输出到 html 页面? 如果我想在 php 中用一些 var 制作一个 div,我会写类似的东西 print (''.$var.''); 或 echo "''.$v
我可以使用 java awt print 来打印文档/文件而不是使用 javax print 吗?我发现在 java awt print 中有一个选项可以使用 AttributedString 将内容
目前我通过以下方式运行 R 脚本: R --slave argument1 argument2 ... 我想知道 R 中关于如何退出脚本并发出警告的最佳实践,q() 会这样做吗? if(!file.
谁能告诉我如何编写一个程序,用 gcc 编译时打印 c ,用 g++ 编译时打印 c++? 最佳答案 #ifdef __cplusplus printf("c++\n"); #else
我需要支持在 KitKat 设备上打印,但我的目标 SDK 是 13(无法更改)。 特别是我需要打印一个 webview。 这是用于打印 webview 的 API: http://developer
我正在尝试创建一个简单的函数,其中 python 将根据您的年份输入计算年龄。我已经尝试了几种方法,但我没有运气 atm。 附:对不起,我是新手。 ame = input(" Enter your n
JavaFX 2.0 是否支持打印?我有一个文本区域,我从中获取文本然后我想打印它,但似乎没有这个功能。 当然,这里我说的是打印到打印机。 :) 最佳答案 尚不支持。作为一种解决方法,您可以使用 Ja
我试图找出printOn的重点。我查看了一些实现它的类,看起来它只是帮助打印不同数据类型的单位。这是准确的吗? 如果是这样,有人能指出我如何为我自己的类(class)实现这一点的正确方向吗?我将在可能
我无法让 IE 打印我的 Canvas (使用 excanvas 生成)...我使用的是最新版本的 excanvas。 http://dl.dropbox.com/u/997831/canvas.ht
我搜索了很多但没有人回答我的问题,我读到在这样的信号处理程序中使用 cout 是不安全的: void ctrlZHandler(int sig_num) { //SIGTSTP-18
我有兴趣打印一系列查询。我有以下代码。 start = datetime.datetime(2012, 2, 2, 6, 35, 6, 764) end = datetime.datetime(201
public class javaClass { public static void main(String [] arg) { String row1 = "A____A"
我需要写入前一行的命令,例如不带\n 的 print()。 下面是一些示例代码: a=0 print("Random string value") if a==0: print_to_prev
我有一个使用 UIKit 和 Objective C 的旧 iOS 应用程序,我目前正在将其移植到 SwiftUI 和 Swift。一切都很顺利,我喜欢 Swift 和 SwiftUI。该应用程序已经
我创建了一个求和函数,它接受一个开始编号和一个结束编号,并返回这两点之间的总和答案 def print_sum_equations(start_number,end_number):
在 Perl 6 中,print 和有什么区别? , put和 say ? 我怎么看 print 5不同,但 put 5和 say 5看起来一样。 最佳答案 put $a就像 print $a.Str
我正在使用 here 中的 getOrgChart 库,我正在尝试打印整个图表,而不仅仅是可见部分。不幸的是,当使用标准库打印功能时,它只会打印出第一部分,而我不知道如何打印整个图表(该图表相当宽,大
我制作了一个非常适合 A4 页面的 View 。现在我想打印它。请注意,我没有使用drawRect或类似的东西,只是一个带有 subview 和文本标签的普通 View 。我的问题是,我对该 View
由于 Cocoa-Java 已弃用,我正在将 Cocoa-Java 代码迁移到 Cocoa + JNI。该代码打印存储在文件中的图像。新的 Cocoa 代码基本上是: NSImage *image =
这个问题已经有答案了: Printing a TDBGrid (4 个回答) 已关闭 6 年前。 如何在不安装或下载组件的情况下打印 DBGrid? 或者 如何将 DBGrid 的数据放入 RichE
我是一名优秀的程序员,十分优秀!