【问题标题】:Accessing value of a variable in a method with parameters in another method使用另一个方法中的参数访问方法中变量的值
【发布时间】:2016-10-11 09:01:09
【问题描述】:

正如您在 public void form4() 中看到的,我想创建一个 JLabel 数组,其大小取决于 public void 接收器(String rlc)中的变量 x。 String rlc 的值来自我的另一个类。如果万一这不可能,请给我建议或其他方法。谢谢

package name1;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class NAME4 extends JFrame implements ActionListener
{
public int x;
String letter = "";
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
JLabel label1;
JTextField part;

String count,count2;
int value;

double lite;
int arraycount;
int array;
JLabel[] parted;
String[] characters;
JButton okbutton;
int int1;
public String ameer;
JLabel label56;
public NAME4()
{
    super ("My Game4");
    setSize(500,500);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(true);
    setLocationRelativeTo(null);
    form4();

}
public void form4()
{
    label1 = new JLabel(letter);
    setLayout(new FlowLayout(1,250,25));
    part = new JTextField(null,3);
    okbutton = new JButton("OK");
    okbutton.addActionListener(this);
    add(label1);
    add(part);
    add(okbutton);
    parted = new JLabel[x];
}

public void receiver(String rlc)
{
    x = Integer.parseInt(rlc);        
    lite = 26/x;
    arraycount = (int) lite;
    array = arraycount +1 ;
    for (int a = 1; a < alphabet.length()+1; a++)
    {
        letter = letter + alphabet.charAt(a-1);
        if ((a) % x == 0)
        {
            letter = letter + "|";
        }
    }
    label1.setText(letter);
    characters = new String [array];
    int inc = x;
    int y;
    int h=0,z;
    for (z = 0 ; z < array ; z++)
    {
        characters[z] = "";
        for (y = h ; y < inc ; y++)
        {
            characters[z] += letter.charAt(y);
        }
            h += (x+1);
            inc = inc + (x+1);
        if (z == array - 2)
        {
            switch(x)
                {
                    case 1: inc = 52;
                        break;
                    case 2: inc = 38;
                        break;
                    case 3: inc = 34;
                        break;
                    case 4: inc = 32;
                        break;
                    case 5: inc = 31;
                        break;
                    case 6: inc = 30;
                        break;
                    case 7: inc = 29;
                        break;
                    case 8: inc = 29;
                        break;
                    case 9: inc = 28;
                        break;
                }
        }
    }
}//void receiver
@Override
public void actionPerformed(ActionEvent e) {

}

}

【问题讨论】:

  • @jcamillo 问了这个(仍然没有足够的代表直接评论):你能把你的问题的重点提取成一段简单的代码吗?究竟是什么问题?

标签: java methods


【解决方案1】:

是的,您可以在form4() 方法中访问x,因为x 是一个类字段,并且可以通过您类中的任何方法访问。
但是,您在 receiver() 方法中初始化 x,该方法在 form4() 之后执行。当form4() 执行时,x 未初始化(默认为 0),因此您的数组大小为 0。

要修复它,您可以将最后一行从form4() 移动到receiver(),如下所示:

public void form4()
{
    ...
    add(okbutton);
}

public void receiver(String rlc)
{
    x = Integer.parseInt(rlc);        
    parted = new JLabel[x]; // <--- now x is initialized
    lite = 26/x;
    ...

【讨论】:

  • 是的,你的权利,但如果我在 public void receiver 上声明我的 JLabel 的大小并执行 add(parted[4]); 4 只是示例。我收到一条错误消息 NullPointerException,这意味着公共 void 接收器内部的 parted = new JLabel[x]; 不可读。
  • 什么add(parted[4]) ?您没有在您发布的代码中的任何地方使用parted,如果您隐藏了代码的重要部分,我们将无法帮助您。请编辑您的帖子以包含所有相关代码。
猜你喜欢
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多