我试图推出以下的字符模式:
String y = "";
for(int i = 0; i < 10; i++)
{
y="";
for(int s = 0; s < i; s++)
{
y+= "x";
}
System.out.println(y);
}
这就是我现在所拥有的:
x
xx
xxx
xxxx
xxxxx
xxxxxx
xxxxxxx
xxxxxxxx
此输出
x
这是一种方法。我很清楚目标模式每次执行循环时增加两个instance Applicative Route where
,我知道我必须使用空格并插入它们。但是,我坚持这个非常简单的任务。
编辑:任务是只使用两个循环。不过我想到了使用三种方式的方法,但无法直接找到使用两个循环的方法。
答案 0 :(得分:2)
我使用1 for
循环和1 for
语句(不是循环),而不是使用两个if
循环。
String spaces = " ";
String word = "";
String X = "x";
for(int i = 10; i > 0; i--) {
if (i%2 == 0) {
word = spaces + X;
System.out.println(word);
spaces = spaces.replaceFirst(" ","");
X += "xx";
}
}
输出就是你问的:
x
xxx
xxxxx
xxxxxxx
xxxxxxxxx
答案 1 :(得分:1)
您可以通过一个循环来解决您的问题,您可以将padLeft
与String.format
一起使用,这是一个简单的示例:
public static void main(String args[]) {
int n = 5;
String str;
for (int i = n; i > 0; i--) {
str = String.format("%0" + ((n - i) * 2 + 1) + "d", 0).replace("0", "x");
System.out.println(String.format("%1$" + ((i - 1 + str.length())) + "s", str));
}
}
<强>输出强>
x
xxx
xxxxx
xxxxxxx
xxxxxxxxx
答案 2 :(得分:1)
由于这个问题有许多不同的可能答案,这只是一种可能的解决方案。
对于这个解决方案,我不打算在X之后打印空格。我只打印之前的那些。
int baseWidth = 10;
for (int a = baseWidth ; a > 0 ; a--) {
for (int b = 0 ; b < a - 1 ; b++) {
System.out.print(" ");
}
for (int b = a - 1 ; b < baseWidth - (a - 1) ; b++) {
System.out.print("X");
}
System.out.print("\n");
}
对于baseWidth = 10,上面代码的结果如下:
XX
XXXX
XXXXXX
XXXXXXXX
XXXXXXXXXX
对于baseWidth = 9:
,上述代码的结果如下 X
XXX
XXXXX
XXXXXXX
XXXXXXXXX
在您的帖子编辑之后,下一个代码片段执行与前一个相同的功能,但只有两个循环。
int baseWidth = 9;
for (int a = baseWidth ; a > 0 ; a--) {
for (int b = 0 ; b < baseWidth - (a - 1) ; b++) {
if (b < a - 1) {
System.out.print(" ");
}
if (b >= a - 1 && b < baseWidth - (a - 1)) {
System.out.print("X");
}
}
System.out.print("\n");
}
答案 3 :(得分:1)
为了好玩,让我们也有一个无循环的解决方案:
static Stack<String> getStarryStrings (String lastString, Stack<String> result) {
//First count the number of *'s in the string
//From:http://stackoverflow.com/questions/275944/java-how-do-i-count-the-number-of-occurrences-of-a-char-in-a-string
int starCount = lastString.length() - lastString.replace("*", "").length();
if(starCount<1) return result;
result.push(lastString);
//Find first and last occurrences of *
int fio = lastString.indexOf('*');
int lio = lastString.lastIndexOf('*');
//And replace them with white spaces
StringBuilder nextLast = new StringBuilder(lastString);
nextLast.replace(fio,fio+1," ");
nextLast.replace(lio, lio + 1, " ");
//And recurse...
return getStarryStrings(nextLast.toString(),result);
}
public static void main(String[] args) {
Stack<String> res = getStarryStrings("*********",new Stack<>());
while(!res.isEmpty()) {
System.out.println(res.pop());
}
显示器:
*
***
*****
*******
*********
注意:强>
我确信这可以通过更有效的方式完成,以消除对java.util.Stack
的需求。我唯一的标准是不使用循环。我让堆栈保留在那里以显示解决方案的递归性质。可以很容易地改进它来使用StringBuilder
来代替堆栈。
答案 4 :(得分:0)
保持两个指针l
&amp; r
将决定您必须在哪个位置打印*
否则打印空间。每行后减少l
并将r
增加1,因为三角形在每行中向左和向右增长1步。
仅使用两个循环...
int n = 5; // number of lines...
int l = n-1, r = n-1;
for(int i = 0; i < n; i++) {
for(int s = 0; s < 2*n; s++) {
if(s >= l && s<= r)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
l--; r++;
}
输出:
*
***
*****
*******
*********
答案 5 :(得分:0)
两圈。
char[] s = " ".toCharArray();
int start = 5;
int end = 5;
for (int i = 0; i < 5; i++) {
for (int j = start; j <= end; j++) {
s[j] = 'x';
}
start--;
end++;
System.out.println(s);
}
一个循环
char[] s = " ".toCharArray();
int start = 4;
int end = 5;
for (int i = 0; i < 5; i++) {
Arrays.fill(s, start, end, 'x');//Remembering importing Arrays class
start--;
end++;
System.out.println(s);
}
答案 6 :(得分:0)
您可能想看看这个:
public class CenterText {
public static void main(String[] args){
centerText(10, 'X');
}
public static void centerText(int noOfLines, char theChar){
final int totalNoOfChars = noOfLines * 2;
String totalSpaces = "";
String chars = "";
for (int i=0; i<totalNoOfChars; i++){
totalSpaces += " ";
}
for (int j=1 ; j<=totalNoOfChars; j++){
chars+=theChar;
if(j%2==0){
System.out.println(totalSpaces.substring(0, noOfLines-(j/2)) + chars);
}
}
}
}
输入:
centerText(10, 'X');
输出:
XX
XXXX
XXXXXX
XXXXXXXX
XXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
输入:
centerText(7, '#');
输出:
##
####
######
########
##########
############
##############