【问题标题】:Instantiating a 2d array in a java constructor?在java构造函数中实例化一个二维数组?
【发布时间】:2013-11-26 08:20:19
【问题描述】:

我很困惑。我需要创建一个构造函数来创建一个带有从主方法调用的参数的二维数组。每次我在同一类的另一个方法中调用 Seats 二维数组时,都会出现错误。为什么会这样?如何使用我在构造函数中创建的数组?

class MovieSeating 
{

public MovieSeating(int rowNum, int columnNum)
{
    String [][] Seats = new String[rowNum][columnNum];
    for (int r = 0; r < rowNum; r++)
    {
        for (int c = 0; c < columnNum; c++)
        {
            Seats[r][c] = "???";
        }
    }
}

private Customer getCustomerAt(int row, int col)
{
    System.out.println("Customer at row " + row + " and col " + col + "." );
    System.out.println(Seats[row][col]);

}

【问题讨论】:

  • I get an error,错误是什么?
  • 我添加了下一个方法,以便您可以看到我在做什么。

标签: java arrays constructor 2d


【解决方案1】:

你在一个很好的轨道上,但你必须使 Seats 实例变量以获得正确的结果:

private String [][] Seats;
public MovieSeating(int rowNum, int columnNum)
{
    Seats = new String[rowNum][columnNum];
    for (int r = 0; r < rowNum; r++)
    {
        for (int c = 0; c < columnNum; c++)
        {
            Seats[r][c] = "???";
        }
    }
}

【讨论】:

    【解决方案2】:

    将构造函数外的数组声明为私有变量:

    class MovieSeating 
    {
        private String [][] Seats;
    public MovieSeating(int rowNum, int columnNum)
    {
        Seats = new String[rowNum][columnNum];
        for (int r = 0; r < rowNum; r++)
        {
            for (int c = 0; c < columnNum; c++)
            {
                Seats[r][c] = "???";
            }
        }
    }
    
    private void getCustomerAt(int row, int col)
    {
        System.out.println("Customer at row " + row + " and col " + col + "." );
        System.out.println(Seats[row][col]);
    
    }
    }
    

    【讨论】:

      【解决方案3】:

      Seatsmain 中是未知的,它仅在构造函数的范围内是已知的。

      您应该将其设为class member 并在构造函数中对其进行初始化:

      class MovieSeating  {
         private String [][] Seats;
         ..
         public MovieSeating(int rowNum, int columnNum) {
            Seats = new String[rowNum][columnNum];
            ..
         }
      }
      

      【讨论】:

      • 我不知道如何解决这个问题。
      • @user2875661 查看我链接到的教程,并查看我的更新。
      【解决方案4】:
      class MovieSeating{
      
      private String[][] seats;
      
      public MovieSeating(int col, int row){
        seats = new String[row][col];
      }
      }
      

      将席位设为实例变量以扩大其范围。

      【讨论】:

        【解决方案5】:

        我在这里发送代码,希望这对你有帮助

        public Charts(int graph_min, int graph_max, double[] dataset, int stepSize,double[][] percentRange) {
        
        //here double[][]={{10},{100}};
        		this(graph_min,graph_max,dataset);
        		this.stepSize = stepSize;
        		
        		System.out.println("double constructor    "+percentRange.length);
        		this.percentRange = new double[percentRange.length][percentRange[0].length];
        		System.out.println("percentRange: "+this.percentRange);
        		 for (int i = 0; i < percentRange.length; i++) {
        			
        	        for (int j = 0; j < percentRange[i].length; j++) {
        	            	this.percentRange[i][j] = percentRange[i][j];
        	            	 System.out.println("ps_Axis constructor valuesd  "+this.percentRange[i][j]);
        	           }
        	       
        	}

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-11
          相关资源
          最近更新 更多