2014-02-28 61 views
1

原文: 好了,所以我必须做出一个简单的数字金字塔,但美中不足的是,它必须使用两种方法。我的问题是,返回不断给我“不兼容的类型”,我不知道为什么。 好了,所以我必须做出一个简单的数字金字塔,但美中不足的是,它必须使用两种方法。我的问题是,返回不断给我“不兼容的类型”,我不知道为什么。回报不兼容的类型(JAVA)

public static void main(String[] args) 
{ 
System.out.println(NumPyramid(1,1)); 
} 
public static int NumPyramid(int i, int j) 
{ 
    for (;i <= 7; i++) 
{ 
    for (; j <= i; j++) 
{   
{  
    return System.out.print(j + " "); 
    } 
} 
} 

编辑:好了,所以现在我的新代码不是一个金字塔的问题

public static void main(String[] args) 
{ 
    NumPyramid(1,1); 
} 
public static void NumPyramid(int i, int j) 
{ 
    for (;i <= 7; i++) 
    { 
     for (; j <= i; j++) 
     {  
      System.out.print(j + " "); 
     } 
     System.out.println(); 
    } 
} 

这种打印出

1 2 3 4 5 6 7

取出的println给1 2 3 4 5 6 7

输出应该是 1 12 123

+2

什么是System.out.print'(..)'做什么和值(如果有的话),它解析为? –

+0

你对'C'的'printf()'/'scanf()'函数感到困惑吗? – asgs

+0

它应该实际打印值并返回到正确格式化的主要方法。 – user3326162

回答

2

好,因为@makoto巧妙地指出,System.out.print是一个void方法,它返回莫不如是:

public static void main(String[] args) { 
    System.out.println(NumPyramid(1,1)); 
} 

也应该被改变。所以,你要作的

public static void NumPyramid(int i, int j) { 
    for (;i <= 7; i++) { 
    for (; j <= i; j++) {  
     System.out.print(j + " "); 
    } 
    } 
} 

一个void方法,以及:

public static void main(String[] args) { 
    NumPyramid(1,1); 
} 

没有得到打印。

编辑

当你有一个新的问题,那就不应该编辑您的问题,在问题的帖子,使之成为一个新的去除填充......但不是接受最好的答案,并作出岗位。在这里,我们不仅要回答你,但我们正在建立一个知识库。如果您有新的问题,请将其作为新帖子!

这就是说,你的新的问题,你的算法是什么了,应该改为:

public static void NumPyramid(int max) { 
    for (int i=1; i<=max; ++i) { 
     for (int j=1; j<=i; ++j) 
      System.out.println(j + " "); 
     System.out.println(); 
    } 
} 
  • 有一个参数max指定的行数,和的宽度金字塔的“基地”;
  • 迭代使用imax回车输出;
  • 使用iterator ji数字
  • 开始迭代为1,所以我们不输出0 1 2max = 31 2 3

这应该输出,最大= 3

1 
1 2 
1 2 3 

HTH ,再次。请,请恢复您的原始问题。

+0

到底!这就是代码 – Frakcool

4

System.out.printvoid方法;也就是说,它什么都不返回。

你不能从一个void方法返回的东西。

只需从该行删除return关键字,您的方法的签名更改从intvoid

然后,在你的主要方法改变调用从中取出System.out.println

+1

它不会工作,因为'NumPyramid'被声明为返回一个'int'。所以,该方法中必须有一个返回值,它返回一个值。 – Jesper

+0

很好,你抓住了两个。做了修订。 – Makoto

+2

它仍然不起作用,因为在'main'方法中他正在打印'NumPyramid'方法的返回值。如果这个方法是'void',你会在'main'方法中出现编译错误。 – Jesper

0

你想打印?

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 

你需要一个参数,它的方法:

public static void NumPyramid(int number) 
{ 
    for (int i = 1; i <= number; ++i) 
    { 
     for (int x = 1; x <= i; ++x) 
     { 
      System.out.print(x + " "); 
     } 

     System.out.println(); 
    } 
} 

我认为这是不言自明的

0

我想你不问不兼容的返回类型了吗?好吧,我想可以回答你现在的问题。

如果你想要的代码是在一个金字塔,你不能做到这一点:

for (;i <= 7; i++) 
{ 
    for (; j <= i; j++) 
    {  
     System.out.print(j + " "); 
    } 
    System.out.println(); 
} 

什么代码正在做的是打印j的值,然后是一个空格,然后打印新线。一个解决方案是创建一个字符串,用于在for循环的每次迭代之后存储数字。

for (;i <= 7; i++) 
{ 
    for (; j <= i; j++) 
    {  
     //System.out.print(j + " "); 
     //The string would take the place of this line 
    } 
    //Since println always prints on a new line, you 
    //could just print the string in this System.out 
    System.out.println(); 
}