回 帖 发 新 帖 刷新版面

主题:[讨论]谁帮我看看这那里出问题

import java.applet.*;
import java.awt.event.*;
import java.awt.*;
public class yanghui extends Applet implements ActionListener{
    Label lb1=new Label("请输入要显示的行数:");
    TextField txt1=new TextField(4);
    Button btn=new Button("确定");
    int n=0;
    int[][] yang;
    public void init(){
        add(lb1);
        add(txt1);
        add(btn);
        btn.addActionListener(this);
        }
    public void actionPerformed(ActionEvent e){
        n=Integer.parseInt(txt1.getText());
        yang=yanghui(n);
        repaint();
        }
    public void paint(Graphics g){
        for(int i=0;i<n;i++){
            String s=" ";
            for(int j=0;j<=i;j++){
                if (yang[i][j]<10)
                    s=s+yang[i][j]+"     ";
                else if (yang[i][j]<100)
                    s=s+yang[i][j]="    ";
                else if (yang[i][j]<1000)
                    s=s+yang[i][j]+"   ";
                else 
                    s=s+yang[i][j]+"  ";
                }
            g.drawString(s,250-16*i,50+16*i);
            }
        }    
    int[][] yanghui(int i){
        int s[][]=new int[i][];
        for (int x=0;x<s.length;x++)
            s[x]=new int[x+1];
            s[0][0]=1;
        for (int y=1;y<s.length;y++){
            s[y][0]=1;
            s[y][s[y].length-1]=1;
            for (int z=1;z<s[y-1].length;z++)
                s[y][z]=s[y-1][z-1]+s[y-1][z];
            }
            return s;
        } 
    }
    
运行结果是:
yanghui.java:28:意外的类型
需要:变量
找到:值                    s=s+yang[i][j];
1错误

这个是杨辉三角数值,上面这个我是按照书上的写下来的!自己修改后也是不行!是不是字符型的S不能与数值型的YANG相加呢?那要怎么改       

下面这个是我自己写的!
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
public class yanghui extends Applet implements ActionListener{
    Label lb1=new Label("请输入要显示的行数:");
    TextField txt1=new TextField(4);
    Button btn=new Button("确定");
    int n=0;
    int[][] yang;
    public void init(){
        add(lb1);
        add(txt1);
        add(btn);
        btn.addActionListener(this);
        }
    public void actionPerformed(ActionEvent e){
        n=Integer.parseInt(txt1.getText());
        repaint();
        }
    int[][] yang(){
        for (int i=1;i<=n;i++){
            for (int j=1;j<=i;j++){
                 if(j>1&j<=i-1)
                 yang[i][j]=yang[i-1][j-1]+yang[i-1][j];
                
                 else
                 yang[i][j]=1;
                }
            }
            return yang;
        }    
    public void paint(Graphics g){
        String s="";
        for(int i=1;i<=n;i++){
            for (int j=1;j<=i;j++){
                s=yang[i][j]+"  ";
            g.drawString(s,250-16*i,50+16*i);
            }}
        }
    }       
    
    那位大哥帮我修改一下                      

回复列表 (共4个回复)

沙发

//你抄书上的       
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
public class yanghui extends Applet implements ActionListener{
    Label lb1=new Label("请输入要显示的行数:");
    TextField txt1=new TextField(4);
    Button btn=new Button("确定");
    int n=0;
    int[][] yang;
    public void init(){
        add(lb1);
        add(txt1);
        add(btn);
        btn.addActionListener(this);
        }
    public void actionPerformed(ActionEvent e){
        n=Integer.parseInt(txt1.getText());
        yang=yanghui(n);
        repaint();
        }
    public void paint(Graphics g){
        for(int i=0;i<n;i++){
            String s=" ";
            for(int j=0;j<=i;j++){
                if (yang[i][j]<10)
                    s=s+yang[i][j]+"     ";
                else if (yang[i][j]<100)
                    s=s+yang[i][j]+"    ";//此处中的+号你打成了=号  s=s+yang[i][j]="    ";
                else if (yang[i][j]<1000)
                    s=s+yang[i][j]+"   ";
                else 
                    s=s+yang[i][j]+"  ";
                }
            g.drawString(s,250-16*i,50+16*i);
            }
        }    
    int[][] yanghui(int i){
        int s[][]=new int[i][];
        for (int x=0;x<s.length;x++)
            s[x]=new int[x+1];
            s[0][0]=1;
        for (int y=1;y<s.length;y++){
            s[y][0]=1;
            s[y][s[y].length-1]=1;
            for (int z=1;z<s[y-1].length;z++)
                s[y][z]=s[y-1][z-1]+s[y-1][z];
            }
            return s;
        } 
    }
//你改的

import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class YangHui extends Applet implements ActionListener {
    Label lb1 = new Label("请输入要显示的行数:");
    TextField txt1 = new TextField(4);
    Button btn = new Button("确定");
    int n = 0;
    int[][] yang;

    public void init() {
        add(lb1);
        add(txt1);
        add(btn);
        btn.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        n = Integer.parseInt(txt1.getText());
        yang();//取到n值以后应该调用yang()方法来给yang数组值并且显示出数字
        repaint();
    }

    int[][] yang() {
        yang = new int[n + 1][];//初始化数组yang,不然会有NullPointerException
        for (int i = 1; i <= n; i++) {
            yang[i] = new int[i+1]; //初始化数组yang[i],不然会有NullPointerException
            for (int j = 1; j <= i; j++) {
                if (j > 1 & j <= i - 1)
                    yang[i][j] = yang[i - 1][j - 1] + yang[i - 1][j];

                else
                    yang[i][j] = 1;
            }
        }
        return yang;
    }

    public void paint(Graphics g) {   //这里的画图我是参考上面那例子,你的会出现重叠。 我对gui不大清楚,不懂那drawString方法的坐标
        for (int i = 1; i <= n; i++) {
            String s = "";    
            for (int j = 1; j <= i; j++) {
                s += yang[i][j] + "        ";
            }
            g.drawString(s, 250 - 16 * i, 50 + 16 * i);
        }
    }
}
//你改的文件里面,循环都是从1到n,所以我初始化数组时都大了1点下标。  循环遍历时最好从0到n-1,初始化时也就可以少一点空间,省资源   ^_^

板凳

哦,谢谢你哦!
那个drawstring我是把一行附值给S,再把S画下来的!这样的思路应该没问题吧?

3 楼

还有,为什么我从书上抄的那个怎么运行不了!这问题出在那里呢?我修改过后,也是出现相同的提示!

4 楼

上面那个可以运行了!问题出在把+打成=
但是下面那个可以编译,可是运行不了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册