以下是我的指示:
写一个名为printStar(int n)
的递归方法,当n = 4时将打印以下内容:
****
***
**
*
*
**
***
****
这是我到目前为止所做的:
public class Stars{
public static void main (String[] args){
printStars(4);
}
public static void printStars(int count){
if (count==0){
System.out.println("");
}
else{
System.out.print("*");
printStars(count-1);
}
}
}
我的尝试只打印给定数量的星星中的一行。我不知道如何只用一次方法调用就可以打印多行。任何帮助表示赞赏。
答案 0 :(得分:1)
这个使用尾递归,分为辅助函数,并仅使用循环来获取所需的字符。
public class JavaR {
public static void main(String[] args) {
System.out.println(star(4, new StringBuilder()));
}
public static StringBuilder star(int times, StringBuilder builder) {
return getStars(times, builder, times);
}
public static StringBuilder getStars(int currentIteration, StringBuilder builder, int times) {
if (currentIteration < -1 * times) return builder;
else if (currentIteration != 0) {
builder.append(getNTimes(Math.abs(currentIteration)));
return getStars(currentIteration - 1, builder, times);
} else {
return getStars(currentIteration - 1, builder, times);
}
}
public static String getNTimes(int count) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < count; i++) {
builder.append("*");
}
return builder.append("\n").toString();
}
}
答案 1 :(得分:0)
您的程序不正确,请参阅以下程序并进行分析 -
optionsGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//do your stuff!
}
});
解释 - 我使用两个while循环来打印星星,首先以asc顺序打印开始,然后以相反顺序打印。使用变量public class Stars{
public static void main (String[] args){
printStars(4);
}
public static void printStars(int count){
if (count==0){
// System.out.println("");
}
else{
int tempCount = count;
while(tempCount>0){
System.out.print("*");
tempCount--;
}
System.out.println();
printStars(count-1);
while(tempCount<count){
System.out.print("*");
tempCount++;
}
System.out.println();
}
}
}
获取当前计数器。
答案 2 :(得分:0)
试试这个
public static void printStars(int count){
if (count == 0){
return;
}
printStarNTimes(count);
printStars(count-1);
printStarNTimes(count);
}
private static void printStarNTimes(int n) {
for (int i = 0; i < n; i++) {
System.out.print("*");
}
System.out.println();
}
逻辑是在当前调用中以及递归调用返回时打印星count
次。
答案 3 :(得分:0)
该方法需要有关*
的最大数量以及方向(*
增加或减少的数量)的信息。
由于请求的方法签名只包含一个参数,因此您可以使用一些方法来定义其他所需信息:
使用this和this答案中的部分递归方法,或使用辅助方法:
public static void printStars(int count){
printStars(count, count, -1);
}
public static void printStars(int count , int max, int increment){
for(int i =0; i< count; i++) {
System.out.print("*");
}
count += increment;
if(count ==0 ) { //lower limit reached
increment = -increment;
}else {
System.out.println("");
}
if (count > max){ //upper limit reached
return;
}
printStars(count, max, increment);
}