java 杨辉三角
最近写了一个关于杨辉三角的代码,不过出了些问题代码如下:
import javax.swing.JOptionPane;
public class San
{
public static void main(String args[])
{
String row;
int row1;
row=JOptionPane.showInputDialog("输入行数:");
row1=Integer.parseInt(row);
int ss[][]=new int[row1][];
int i,j;
ss[0][0]=ss[1][0]=ss[1][1]=1;
for(i=3;i<row1;i++)
{
ss[i][0]=ss[i][i-1]=1;
for(j=0;j<i-1;j++)
{
ss[i][j]=ss[i-1][j]+ss[i-1][j+1];
}
}
for(i=0;i<row1;i++)
{
for(j=0;j<i-1;j++)
{
System.out.print(ss[i][j]);
}
System.out.println();
}
System.exit(0);
}
}
运行结果如下:
Exception in thread "main" java.lang.NullPointerException
at San.main(San.java:12)
另外还有一个问题:如果成功更改的话,杨辉三角会以直角三角形的方式输出,但是如果要用等腰三角形输出呢,能不能把其中的重要部分写一下,谢谢帮助。
----------------解决方案--------------------------------------------------------
import javax.swing.JOptionPane;
public class San
{
public static void main(String args[])
{
String row;
int row1;
row=JOptionPane.showInputDialog("输入行数:");
row1=Integer.parseInt(row);
int ss[][]=new int[row1][row1]; //二维数组要分配内存空间,否则空指针异常
int i,j;
ss[0][0]=ss[1][0]=ss[1][1]=1;
for(i=3;i<row1;i++)
{
ss[i][0]=ss[i][i-1]=1;
for(j=0;j<i-1;j++)
{
ss[i][j]=ss[i-1][j]+ss[i-1][j+1];
}
}
for(i=0;i<row1;i++)
{
for(j=0;j<i-1;j++)
{
System.out.print(ss[i][j]);
}
System.out.println();
}
System.exit(0);
}
}
----------------解决方案--------------------------------------------------------
package cn.dadongzicool.examplesanjiao;
import javax.swing.JOptionPane;
public class San {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String rowString;
int rowInt;
rowString = JOptionPane.showInputDialog("输入行数:");
rowInt = Integer.parseInt(rowString);
int triangle[][]=new int[rowInt][rowInt * 2 - 1];
for(int i = 0;i < rowInt;i++){
for(int j = 0;j < rowInt * 2 -1;j++){
triangle[i][j] = -1;
}
}
for(int i = 0;i < rowInt;i++){
triangle[(rowInt * 2 - 1) / 2 - i][i] = 1;
triangle[(rowInt * 2 - 1) / 2 - i][rowInt * 2 - 1 - i - 1] = 1;
}
for(int i = 2;i < rowInt;i++){
for(int j = 0;j < rowInt * 2 -1;j++){
if(j > rowInt - i - 1 && j < rowInt * 2 - 1 - 1
&& triangle[i - 1][j -1] != -1 && triangle[i -1][j + 1] != -1)
triangle[i][j] = triangle[i - 1][j -1] + triangle[i -1][j + 1];
}
}
for(int i = 0;i < rowInt;i++){
for(int j = 0;j < rowInt * 2 - 1;j++){
if(triangle[i][j] == -1){
System.out.print(" ");
}
else{
System.out.print(triangle[i][j]);
}
}
System.out.println();
}
System.exit(0);
}
}
自己写了一下 还是不太完美 五行以内还能凑合着看 因为行数越多 数字占用的字节越多 用一个空格来区分就有点小了
效果如下
row = 5:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
row = 6:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
row = 10:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
row = 20:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1
----------------解决方案--------------------------------------------------------
回复完了 发现最后一行 有点偏移 实际上运行效果没有偏移的 不知道为什么回复后 就有了一个空格的偏移
----------------解决方案--------------------------------------------------------
回复 4楼 dadongzicool
谢谢,其实是没有偏移的,不过,因为有的行有两个两位数,而下一行三个两位数,故此多了一位;因此下面的行都有这样后果,因而显得偏移了一行,不知道我解释的对不对。 ----------------解决方案--------------------------------------------------------
回复 4楼 dadongzicool
版主,问一下,java里面有没有一个函数或类能限制“输出数”以几个格输出。 ----------------解决方案--------------------------------------------------------
import javax.swing.JOptionPane;
import java.io.*;
public class San {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String rowString;
int rowInt;
rowString = JOptionPane.showInputDialog("lines:");
rowInt = Integer.parseInt(rowString);
int triangle[][]=new int[rowInt][rowInt * 2 - 1];
for(int i = 0;i < rowInt;i++){
for(int j = 0;j < rowInt * 2 -1;j++){
triangle[i][j] = -1;
}
}
for(int i = 0;i < rowInt;i++){
triangle[(rowInt * 2 - 1) / 2 - i][i] = 1;
triangle[(rowInt * 2 - 1) / 2 - i][rowInt * 2 - 1 - i - 1] = 1;
}
for(int i = 2;i < rowInt;i++){
for(int j = 0;j < rowInt * 2 -1;j++){
if(j > rowInt - i - 1 && j < rowInt * 2 - 1 - 1
&& triangle[i - 1][j -1] != -1 && triangle[i -1][j + 1] != -1)
triangle[i][j] = triangle[i - 1][j -1] + triangle[i -1][j + 1];
}
}
for(int i = 0;i < rowInt;i++){
for(int j = 0;j < rowInt * 2 - 1;j++){
if(triangle[i][j] == -1){
System.out.printf("%3s"," "); //用printf方法以3个格输出字符串
}
else{
System.out.printf("%3d",triangle[i][j]); //用printf方法以3个格输出数字
}
}
System.out.println();
}
System.exit(0);
}
}
[ 本帖最后由 lampeter123 于 2010-3-27 11:05 编辑 ]
----------------解决方案--------------------------------------------------------
printf()是JDK5.0以后才加入的,用法类似于C语言
----------------解决方案--------------------------------------------------------
回复 7楼 lampeter123
貌似稍微规则了一点 但是 行数很多的时候...... ----------------解决方案--------------------------------------------------------
你可的控制输出的格数,如果是2位数就输出2格,3位3格,4位4格。。。。
行数太多的话,你的屏幕都爆满了
----------------解决方案--------------------------------------------------------