使用java编程中的用户输入中的字符创建三角形

时间:2014-10-26 23:45:28

标签: java string

我是编码和使用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

2 个答案:

答案 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);
    }
}