2013-10-04 6 views
-1

я написал этот короткий код некоторое время назад:методы и переменные Вызывать Вопросы

public class Check { 
public static int gold, silver; 
public int level=1; 

public static void main(String[] args) { 
    System.out.println("You are now level " + level + "!"); 
    String num1 = JOptionPane.showInputDialog("Enter a positive number:"); 
    int num2 = Integer.parseInt(num1); 
    if (num2 < 0) { 
     next(); 
    } else { 
     main(); 
    } 
} 
public void next() { 
    System.out.println("Thank you!"); 
} 

}

У меня есть 3 проблемы с этим кодом:

  1. Если я делаю public static Integer variable, я не могу задать ему номер при объявлении. И я должен указать число при объявлении. EDITED: Мое плохое, можно присвоить номер при объявлении.

    Если я делаю общедоступную переменную Integer, я могу объявить ее и установить для нее число, но по какой-то причине я не могу использовать ее в общедоступной статической void Main, что тоже нужно.

  2. Поскольку next() не является статическим, я не могу назвать его из основного (String [] args) void. Я не хочу делать next() static, потому что тогда я не смогу использовать общедоступные целые числа, которые не являются статическими.

  3. Я не могу вернуть (вызов) main() из main(). Это необходимо, когда обнаружен недопустимый ввод.

Что я могу сделать по этим проблемам?

+1

Вы должны прочитать это, чтобы получить базовое представление о переменных Java. Http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html – digitaljoel

ответ

2

Если вы не хотите использовать статический метод, вы должны создать объект класса в своем основном методе и использовать его для вызова метода next().

Check obj = new Check(); 
obj.next(); 
+0

Спасибо, отлично работает. Кроме того, есть ли причина создавать статические пустоты, или мне лучше делать новые пустоты нестационарными? – BlueRay101

+0

'static' и' void' - это две совершенно разные вещи. Обычно статические методы лучше всего избегать - они, как правило, демонстрируют плохой дизайн OO. –

2

If I make a public static Integer variable, I cannot set a number to it while declaring it.

Да вы можете.

If I make a public Integer variable, I can declare it and set a number to it, but for some reason I cannot use it in the public static void Main

Это связано с тем, что статические методы не могут использовать нестатические атрибуты.

I cannot return (call) main() from main() itself. It's necessary for when invalid input is detected.

Да, вы можете, но вам нужно передать параметры.

+0

Спасибо, но напишите main(); дает мне следующую ошибку: метод main in class Check не может применяться к данным типам; – BlueRay101

+0

@BarSharabani Да, как отметил Николай, вам нужно дать аргумент основному методу. –

1
  1. Вы где-то ошибались.
  2. У вас нет доступа к статическим статическим элементам из статических методов (основной является статическим).
  3. Вы забыли о параметрах

попробовать этот вариант:

public class Check { 
    public static int gold, silver; 
    public static int level = 1; 

    public static void main(String[] args) { 
     System.out.println("You are now level " + level + "!"); 
     String num1 = JOptionPane.showInputDialog("Enter a positive number:"); 
     int num2 = Integer.parseInt(num1); 
     if(num2 < 0) { 
      next(); 
     } 
     else { 
      main(args); 
     } 
    } 

    public static void next() { 
     System.out.println("Thank you!"); 
    } 
} 
+0

Спасибо, он отлично работает. Но у меня есть вопрос: если я только публичный int (нестатический), я не могу использовать его в статических методах. Почему это? – BlueRay101

+0

Вы должны прочитать java-учебники, чтобы понять это полностью. В двух словах статические члены являются членами класса, а нестатические члены - это члены объекта. Чтение этой статьи может помочь понять http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html. Главная страница для учебных пособий: http://docs.oracle.com/javase/tutorial/java/TOC.html. – Nicolai

0

Несколько комментариев.

1) Если я публично статическую переменную типа Integer, я не могу установить ряд к нему, заявляя, что

Почему?

Вы должны легко быть в состоянии объявить его следующим образом:

public static int level = 1; 

Затем код будет работать нормально.

2) Избегайте статического - не называйте свою логику программы от main, используйте main для начальной загрузки приложения:

public int gold, silver; 
public int level = 1; 

public static void main(String[] args) { 
    new Check().read(); 
} 

public void read() { 
    System.out.println("You are now level " + level + "!"); 
    String num1 = JOptionPane.showInputDialog("Enter a positive number:"); 
    int num2 = Integer.parseInt(num1); 
    if (num2 < 0) { 
     next(); 
    } else { 
     read(); 
    } 
} 

public void next() { 
    System.out.println("Thank you!"); 
} 

Так вы сделаете все, что экземпляр области действия, а затем создать экземпляр из Check в main.

Я также хотел бы отметить, что вы используете классы Swing GUI вне EDT, который разбивает однопоточную модель Swing, поэтому этот код в корне ошибочен.

Смежные вопросы