我是编码和使用java的新手。我一直在研究这个java代码已经有一段时间了,我无法理解它。我正在尝试编写一个程序,将一个字符串作为输入,并以一系列行,第一个字符,然后是下两个字符,然后接下来的三个字符等输出字符串。但最后一行可能很短,具体取决于原始字符串的大小。输出示例如下:
String? abcdefghijklmnopqrstuvwxyz0123456789
a
bc
def
ghij
klmno
pqrstu
vwxyz01
23456789
这就是我现在所做的,我尝试了一些事情
import java.util.Scanner;
public class TrianglingPhrase {
public static void main(String[] args) {
// declare variables
String phrase;
int start = 0;
// get input
Scanner scan = new Scanner(System.in);
System.out.print("String? ");
phrase = scan.nextLine();
while(start < phrase.length()) {
String row = phrase.substring(start, start + 1);
start++;
System.out.println(row);
}
}
}
这也是我用这段代码得到的输出:
String? abc123
a
b
c
1
2
3
答案 0 :(得分:0)
无论你做什么,substring(start,start + 1)都只能生成长度为1的字符串。所以至少这必须不断增长。在这种情况下使用var n。每当它开始+ n&gt; length()
时它应该停止生长int n=0;
while(start < phrase.length()) {
n++;
if(start+n > phrase.length())
n=phrase.length()-start;
String row = phrase.substring(start, start + n);
start+=n;
System.out.println(row);
}
答案 1 :(得分:0)
因为这些是所谓的triangle numbers你可以用i *(i + 1)/ 2对它们进行建模。开始跟踪旧结束的位置,以便您可以执行此操作:
int start = 0;
int end = 1;
for (int i = 2; end <= phrase.length(); i++) {
String row = phrase.substring(start, end);
System.out.println(row);
start = end;
end = (i * (i + 1) / 2);
}
}