第一题:如何让我的数组里的9和 17 打印出行是9行列是 17 列的图形,为什么我打印的总是少一行,而且列也是不对,是不是越界了?public class tuxing {
public static void main(String[] args){
int[][] tt = new int[9][17];
for(int i = 0;i < tt.length;i++){
for(int j = 0;j < tt.length - i;j++)
System.out.print(" ");
for(int j = 0;j < 2 * i - 1;j++)
System.out.print('*');
System.out.println();
}
}
}第二题:我只会用这种苯方法实现求阶乘,请问如果用递归的方法,这道题应该怎样做呢?public class jiecheng {
public static void main(String[] args){
long t = 1;
long sum = 1;
do{
sum *= t;
t++;
}while(t <= 15);
System.out.println("15的阶乘是:" + sum);
}
}第三题:从控制台输入两个数,求最大公约数import java.util.Scanner;
public class gys {
public static void main(String[] args){
System.out.print("请输入两个整数:");
Scanner scan = new Scanner(System.in);
int c;
int a = scan.nextInt();
int b = scan.nextInt();
System.out.println("两个数的最大公约数是:");
}
}第一问:这道题中的 '*' 和 "*" 打印出来的效果一样,但是如果从理论上说是不同的,但是具体怎么不同,我也说不出来,如果有哪位高手知道,希望不吝赐教!第二问:还是这道题,就是 b[0].length 和 b[i].length 在这道题里显示的效果是相同的,但是 [i] 和 [0] 是不同的 [0] 是数组的第一个下标,而 [i] 是根据数组的大小而定,请问为什么 [i] 和 [0] 在这道题里的效果是一样的?int[][] b = new int[5][7];
for (int x = 0;x < b.length; x++) {
for(int y = 0;y < b[0].length;y++) {
System.out.print('*');

解决方案 »

  1.   

    一。 for(int i = 0;i < tt.length;i++){
              for(int j = 0;j < tt.length - i;j++)
         这边问题不小,一般用i和行数9比较,j和列数17比较二。 f(n) = n * f(n-1) ;
         f(1) = 1 ;三。  选a,b中较小的,如果a<b,那么
          for(int i = a ; i > 0 ; i-- )
          {
                如果i能整除a和b,那么i就是他们的最小公约数。
          }
          循环结束还没找到这个公约数,那公约数就是1
      

  2.   

    最大公约数....public static int gcd(int a, int b) {
    int r;
    while(b!=0) {
    r = a % b;
    a = b;
    b = r;
    }
    return a;
    }
      

  3.   

    for(int i = 1;i <=9;i++)
       for(int j = 1;j <=17;j++)
    你要从1开始就不会少了.
      

  4.   

    public class TestArray 
    {
        public static void main(String[] args)
        {
            int [][] t=new int[9][17];
            for(int i=1;i<=t.length;i++)
            {
             for(int j=0;j<t.length-i;j++)
             System.out.print(" ");
             for(int k=0;k<2*i-1;k++)
             System.out.print("*");
                System.out.println();
            }
        }
    }边界问题。for循环的初始值和边界值没有设好。
      

  5.   

    第一题的变体,实际上只要设置一个行数(9)就可以了,17 可以通过(行数*2-1)计算出来的。算法一(根据以下特性来实现):1+3 = 4 = 2^2 = ((3+1)/2)^2
    1+3+5 = 9 = 3^2 = ((5+1)/2)^2
    ...
    1+3+5+..+n = ((n+1)/2)^2final int LINE = 9;
    int k = 1;
    String str = "";
    for (int j = 0; j < LINE - k; j++) {
      str += " ";
    }
    System.out.print(str);
    for (int i = 0, sum = LINE * LINE; i < sum; i++) {
      if (k * k == i) {
        System.out.print("\n" + str.substring(k));
        k++;
      }
      System.out.print("*");
    }这个实现虽然长了些,都是为了输出左边的空格,如果没有空格的话的,一个循环就可以搞定了。
    算法二(根据左右对称来实现):final int LINE = 9;
    for (int i = 0; i < LINE; i++) {
      for (int j = -(LINE - 1); j <= i; j++) {
        System.out.print(Math.abs(j) <= i?"*":" ");
      }
      System.out.println();
    }当然了,实现这样的图形有很多的算法,喜欢哪一种呢?
      

  6.   

    一个字符的话可以使用 '*',''这是个字符(char),而 "" 是字符串(String),对于这题来说没有什么区别。
      

  7.   

    求最大公约数也可以使用递归:
    public static int divisor(int m, int n){
         if(m%n == 0)
             return n;
         else
             return divisor(n, m%n);
    }
      

  8.   

    第一题的代码不是给你了吗?
    final int LINE = 9; 
    for (int i = 0; i < LINE; i++) { 
    for (int j = -(LINE - 1); j <= i; j++) { 
    System.out.print(Math.abs(j) <= i ? "*" : " "); 

    System.out.println(); 
    }
      

  9.   

    import   java.util.Scanner;
    public   class   gys   {
    public   static   void   main(String[]   args){
    System.out.print( "请输入两个整数: ");
    Scanner   scan   =   new   Scanner(System.in);
    int   c;
    int   a   =   scan.nextInt();
    int   b   =   scan.nextInt();
    if  ( a > 0  &&  b > 0 )
    {
            c = a % b;
            while (c != 0)
            {
                a = b;
                b = c;
                c = a % b;
            }
            System.out.println( "两个数的最大公约数是: " + b );
    }
    else
    System.out.println( "输入错误" );}