找不到变量

时间:2011-05-02 02:15:15

标签: java arrays

我的程序编译遇到问题时遇到问题。我目前有这个程序的两个类,我的变量lotteryNumbers是第一个类。它是一个int数组变量,所以我不知道如何在这行代码中插入它。这个节目是一个让人们选票的彩票计划。这是代码行,我得到的第一个问题是找不到变量

import java.util.Scanner;
import java.util.InputMismatchException;
public class CashBallTest
{
public static void main(String[]args)
{
    Scanner keyboard = new Scanner(System.in);
    int kicker;
    System.out.println("\t\t\t\tCashLottoBall");
    System.out.println("Player picks four numbers from 1 to 33 called LottoCash Balls.  LottoCash Ball numbers must be unique from all other LottoCash Balls.");
    System.out.println();
    System.out.println("The player must also pick a CashBall from 1 to 31.");
    System.out.println();
    System.out.println("Kicker is a brand new feature you can purchase with your CashBall ticket which lets you get in on an extra drawing.");
    System.out.println();
    System.out.println();
for(int index=0; index<lotteryNumbers.length; index++)
{

来自for(int ..... line at the bottom。

编辑* 这是第一个名为CashBall的类,其中包含变量

import java.util.Scanner;
public class CashBall
{
    Scanner keyboard = new Scanner(System.in);
    int[] lotteryNumbers = new int[4];
    int[] kicker = new int[4];
    int[] kickerPowerBall = new int[1];
    int yourNumbers;
    int CashBallPick;
    public CashBall(int yourNumbers, int CashBallPick)
    {
        this.yourNumbers=yourNumbers;
        this.CashBallPick=CashBallPick;
    }
    public int getYourNumbers()
    {
        return yourNumbers;
    }
    public int getCashBallPick()
    {
        return CashBallPick;
    }
    public void setYourNumbers(int yourNumbers)
    {
        this.yourNumbers=yourNumbers;
    }
    public void setCashBallPick(int CashBallPick)
    {
        this.CashBallPick=CashBallPick;
    }

}

5 个答案:

答案 0 :(得分:0)

您是否已将lotteryNumbers定义为定义它的类中的受保护或公共变量

如果它们不在同一个包中,你还需要包含定义变量lotteryNumbers的类int

或者你可以在定义它的类中定义一个函数get_lottery_Numbers(),然后在其他类中调用该方法。

这里有一个例子可以提供帮助

http://www.roseindia.net/java/javascript-array/call-method-another-class.shtml

答案 1 :(得分:0)

您没有名为lotteryNumbers的变量。

答案 2 :(得分:0)

other class中,您需要为lotteryNumbers字段声明一个getter,然后使用getter方法在CashBallTest中获取该字段。

这是一个例子。我们假设您的另一个类名为SomeClazz。它应如下所示: -

public final class SomeClazz {
    private final int[] lotteryNumbers;
    public SomeClazz(int[] lotteryNumbers){
        this.lotteryNumbers=lotteryNumbers;
    }
    public int[] getLotteryNumbers() {
        return lotteryNumbers;
    }

}

然后在CashBallTest课程中,您应该有以下内容来访问lotteryNumbers: -

        int[] lotteryNumbers = {1,2,3};
        SomeClazz clazz = new SomeClazz(lotteryNumbers);
        for(int index=0; index<clazz.getLotteryNumbers().length; index++){
        } 

现在您可以从其他类访问lotteryNumbers,因此不再出现未知符号错误。

答案 3 :(得分:0)

如果“lotteryNumbers在第一堂课”中你的意思是在lotteryNumbers类中有一个字段CashBallTest,那么访问它的方式取决于它的声明方式。如果它是静态变量,您可以通过CashBallTest.lotteryNumbers引用它。如果它不是静态的,那么您需要创建CashBallTest的实例(我们称之为test),然后通过test.lotteryNumbers引用它。

答案 4 :(得分:0)

因此,在您的CashBall课程中,您需要:

import java.util.Scanner;
import java.util.InputMismatchException;
public class CashBall
{
  // you should probably initialize this variable in your constructor
  private int[] lotteryNumbers;
  public int[] getLotteryNumbers() { return lotteryNumbers; }
}

这定义了一个名为lotteryNumbers的类内部的私有变量,然后创建一个公共方法,将其公开给测试类。然后,您需要在CashBallTest中创建CashBall对象,并访问其彩票号码。像:

public class CashBallTest
{
  public static void main(String[]args)
  {
      CashBall test = new CashBall();
      for(int index=0; index < test.getLotteryNumbers().length; index++) ;
  }
 }

我们这样做是为了封装变量,以便稍后我们可以更改CashBall用于存储lotteryNumbers的内部变量,而不会强制使用CashBall更改其所有代码的其他类。

例如,我可以改变:

private int[] lotteryNumbers;

import java.util.collections.ArrayList
private ArrayList<Integer> lotteryNumbers;
public int[] getLotteryNumbers() { 
  int[] returned; 
  return lotteryNumbers.toArray(returned);
}

封装是一种很好的编码实践,所以一定要养成封装私有的习惯。

要获得额外的功劳,您可能不希望在测试中遍历数组的长度。这很糟糕,因为您的测试依赖于具有int []的CashBall。如果CashBall发生变化,您的测试必须改变。

要“做得对”,你应该在CashBall中添加处理“选择彩票号码”的方法(我假设这是第一个循环试图做的),“验证彩票号码”和“玩踢球者”那么你的测试课就会变成这样:

import java.util.Scanner;
import java.util.InputMismatchException;
public class CashBallTest
{
   CashBall toTest;
   public static void main(String[]args)
   {
       toTest = new CashBall(); // add parameters here as necessary
       toTest.collectUserLotteryNumbers(); // put the Scanner stuff in here. Make the menu its own void method that's called from here
       if(toTest.validateUserNumbers() == false) {
          throw new InputMismatchException("Numbers must be between 1-31, and cannot be repeated");
       }
   }
 }

随着您获得更多编码经验,您会发现自己编写如下:

public class CashBallTest
{
   CashBall toTest;
   public static void testUserCollection()
   {
      toTest = new CashBall(); // add parameters here as necessary
       toTest.collectUserLotteryNumbers(); // put the Scanner stuff in here. Make the menu its own void method that's called from here
       if(toTest.validateUserNumbers() == false) {
          throw new InputMismatchException("Numbers must be between 1-31, and cannot be repeated");
   }
   public static void main(String[]args)
   {
      testUserCollection();   
   }
   }
 }

这使您可以将您正在测试的每个事物分解为自己的特定方法,从而可以轻松添加单个测试或修改它们,而不会破坏主方法中的其他内容。进入这种实践后,您将准备好了解单元测试框架,如JUnit。