2015-11-27 4 views
1

Я пытаюсь создать метод. Основываясь на том, что я прочитал и наблюдал за мной, хотя это был способ создать, а затем вызвать метод, но я не уверен, правильно ли я это делаю. Я получил и ошибки, когда я выполнил это. Если у вас есть предложения по улучшению кода, который будет очень цениться.Ошибка при попытке вызова метода

Здесь ошибка:

Error: can not find symbol.

И это дало мне около 10 из этих ошибок всех Referance массивов в общественных статических недействительных getLabelData(), где я пытался создать метод.

Вот код:

import javax.swing.JOptionPane; 
public class MailOrderCall 
{ 
public static void main(String[] args) 
{ 
    streetAddress, city, state, zip. 
    String nameAddressArray[] = new String[7]; 
    String numBoxesInput; 
    int numBoxes; 
    String enterAnother = "Y"; 
    int counter; 



    getLabelData(); 

    while(enterAnother.equalsIgnoreCase("Y")) 
    { 
     counter = 1; 
     // begin the inner loop to display a label and increment the counter 
     while(counter <= numBoxes) 
     { 
      System.out.println(nameAddressArray[0] + " " + nameAddressArray[1] + " " + nameAddressArray[2]); 
      System.out.println(nameAddressArray[3]); 
      System.out.println(nameAddressArray[4] + ", " + nameAddressArray[5] + " " + nameAddressArray[6]); 
      System.out.println("Box " + counter + " of " + numBoxes); 
      System.out.println(); 
      counter = counter + 1; 
     } // end while 

     // ask the user if finished entering mail orders 
     enterAnother = " "; // initialize the variable to something other than "Y" before sending the prompt 
     enterAnother = JOptionPane.showInputDialog("Do you want to produce more labels? Y or N"); 

     // validate input for enterAnother... keep them here until they enter Y, y, N, or n 
     while (!enterAnother.equalsIgnoreCase("Y") && !enterAnother.equalsIgnoreCase("N")) 
     { 
      enterAnother = JOptionPane.showInputDialog(null, "Invalid Response. Please enter Y or N.", 
                 "DATA ENTRY ERROR", JOptionPane.ERROR_MESSAGE); 
     } // end while 

     if(enterAnother.equalsIgnoreCase("Y")) 
     { 
      // if the user said they have more, then send prompts to read the next mail order input from user 
     getLabelData(); 
     } // end if 
    } // end while 
// successfully terminate the application 
system.exit(0); 
} // end main() 

public static void getLabelData() { 
      nameAddressArray[0] = JOptionPane.showInputDialog("Enter  title (Mr., Ms., Dr., etc.): "); 
       nameAddressArray[1] = JOptionPane.showInputDialog("Enter first name: "); 
       nameAddressArray[2] = JOptionPane.showInputDialog("Enter lastname: "); 
       nameAddressArray[3] = JOptionPane.showInputDialog("Enter street address: "); 
       nameAddressArray[4] = JOptionPane.showInputDialog("Enter city: "); 
       nameAddressArray[5] = JOptionPane.showInputDialog("Enter state (IL, MO, etc.): "); 
       nameAddressArray[6] = JOptionPane.showInputDialog("Enter zip (e.g., 62025): "); 

       numBoxesInput = JOptionPane.showInputDialog("Enter number of boxes in the order:"); 
     numBoxes = Integer.parseInt(numBoxesInput); 
} 


} // end class 

Я очень новичок в этом, так что я извиняюсь, если мой код полной катастрофой я просто Старается понять, почему это дает мне ошибку.

+2

Вы не можете получить доступ к локальным переменным одного метода ('main') из другого метода. Локальные переменные существуют только в блоке, где они были объявлены. – RealSkeptic

ответ

0

Казалось бы, вы пытаетесь получить доступ к переменной, недоступной в вашей функции getLabelData. если вы хотите использовать переменную в нескольких функций, вы должны объявить его в рамках всего вашего класса, например, так:

public class MailOrderCallEMH { 

    String nameAddressArray[] = new String[7]; 
    String numBoxesInput; 

    public static void main(String[] args) { 
     // ... 
    } 

} 

Кроме того, streetAddress, city, state, zip. не выглядит как допустимый синтаксис Java. Вы должны, вероятно, объявить эти переменные обычно:

// Replace Object by the type you want 
Object streetAddress; 
Object city; 
Object state; 
Object zip; 

Надеюсь, это поможет!

0

nameAddressArray был объявлен как локальная переменная в вашем методе main. Если вы объявите переменную внутри метода, вы можете получить доступ к ней только из этого метода.

Если вы хотите nameAddressArray быть доступны из любого метода в классе, объявить его в качестве переменной-члена MailOrderCallEMH, объявив его внутри своего класса, но вне метода, как это

public class MailOrderCallEMH 
{ 
    // Since this is a member of the class, you can use it from any method within this class 
    static String nameAddressArray[] = new String[7]; 

    public static void main(String[] args) 
    { 
     // code 
    } 

    public static void getLabelData() 
    { 
     nameAddressArray[0] = JOptionPane.showInputDialog("Enter  title (Mr., Ms., Dr., etc.): "); 
     // and so on 
    } 
} 

Кроме того, обратите внимание, как я объявил nameAddressArray как static. Причиной этого является то, что переменные-члены, к которым обращаются в статическом методе, также должны быть статическими. Поскольку вы начинаете с Java, я рекомендую прочитать о том, что делает static. В общем, использование статических переменных и методов не рекомендуется.

Другой способ сделать это, чтобы передать nameAddressArray в качестве параметра getLabelData

public class MailOrderCallEMH 
{ 
    public static void main(String[] args) 
    { 
     String nameAddressArray[] = new String[7]; 
     getLabelData(nameAddressArray); 
     System.out.println(nameAddressArray[0] + " " + nameAddressArray[1] + " " + nameAddressArray[2]); 
    } 

    public static void getLabelData(String nameAddressArray[]) 
    { 
     nameAddressArray[0] = JOptionPane.showInputDialog("Enter  title (Mr., Ms., Dr., etc.): "); 
     // and so on 
    } 
} 

Важно отметить, что в этом примере, причиной того, что getLabelData может обновить переменную, объявленную внутри main заключается в том, что переменная передается по ссылке (в отличие от передачи по значению). Это еще одна важная концепция, над которой вам следует убедиться, что вы знакомы.