2014-01-04 3 views
2

У меня возникли проблемы с очень простой, начинающей Java-программой. У меня есть функция, которая должна возвращать значение, зависящее от ответа пользователя на сообщение JOptionPane YES_NO_OPTION. Программа работает очень хорошо, пока вам не представится возможность начать снова или отступить. Независимо от того, какой вариант вы выберете, да или нет, он вернет вас, чтобы сделать новый цикл. Я знаю, что один способ исправить это будет просто полагаться на кнопку отмены, но я хочу понять, почему этот код не возвращает значения, которые я ожидаю, так что было бы очень благодарно за вашу помощь.JOptionPane YES_NO_OPTION

import javax.swing.JOptionPane; 

    public class HelloMK2 { 
     public static void main(String[] args) { 

     for (int i = 0; i < 3000; i++) { 
      double Int1 = optiontakeshape(); 
      double Int2 = optiontakediam(); 
      if (Int1 == 1.0) { 
       Shape s1 = new Circle(Int2); 
       infoBox(s1.area2d()); 
      } else { 
       Shape s1 = new Sphere(Int2); 
       infoBox(s1.volume()); 
      } 
      int yesno = repeat(); 
      if (yesno == 1) { 
       System.out.println(yesno); 
       break; 
      } 
     } 
    } 

    public static int repeat() { 
     int j; 
     int g = JOptionPane.YES_NO_OPTION; 
     JOptionPane.showConfirmDialog(null, "Would you like to begin again?", 
       "Repeat?", g); 
     if (g == JOptionPane.NO_OPTION) { 
      j = 1; 
      System.exit(0); 
     } else if (g == JOptionPane.YES_OPTION) { 
      j = 2; 
     } else { 
      j = 3; 
      System.exit(0); 
     } 
     System.out.println(j); 
     return j; 
    } 
    //... 
} 

EDIT: Спасибо за много быстрых ответов. Я фактически не тестировал значение результата «Да/Нет». Код, который я в настоящее время осуществляется в:

public static int repeat() 
     { 
     int j; 
     if (JOptionPane.showConfirmDialog(null, "Would you like to begin again?", "Repeat?", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION){ 
      j = 2; 
     } else { 
      j = 1; 
      //System.exit(0); escaped so I could test the break point was working properly 
     } 
     System.out.println(j); 
     return j; 
     } 
+0

Почему вы проверить, что g после того, как вы установили его в JOptionPane.YES_NO_OPTION; –

ответ

2

Это ваша проблема.

int g = JOptionPane.YES_NO_OPTION; 

g всегда будет YES_NO_OPTION, в котором в терминах целочисленных значений такое же, как YES_OPTION. Оба 0.

Вместо этого попробуйте

int g = JOptionPane.showConfirmDialog(null, "Would you like to begin again?", "Repeat?", JOptionPane.YES_NO_OPTION); 
+1

Не верьте, будьте [уверены] (http://docs.oracle.com/javase/7/docs/api/constant-values.html#javax.swing.JOptionPane.YES_NO_OPTION) :) –

+1

Спасибо за ссылку , теперь я _sure_ :) –

2

Присвоить выбранное значение g:

g = JOptionPane.showConfirmDialog(null, "Would you like to begin again?", 
       "Repeat?", g); 

В настоящее время, г задается значение JOptionPane.YES_NO_OPTION;

2

Вы не хранящей результат

JOptionPane.showConfirmDialog(null, "Would you like to begin again?", 
       "Repeat?", g); 

в любом месте. Вы используете только значение g, которое всегда равно JOptionPane.YES_NO_OPTION;, которое постоянно установлено на 0.

Попробуйте, пожалуйста, с этим кодом.

int response = JOptionPane.showConfirmDialog(null, "Would you like to begin again?", 
     "Repeat?", g); 
if (response == JOptionPane.NO_OPTION) { 
    j = 1; 
    System.exit(0); 
} else if (response == JOptionPane.YES_OPTION) { 
    j = 2; 
} else { 
    j = 3; 
    System.exit(0); 
} 

Или, может быть, даже лучше (и, безусловно, короче)

 //... 
     if (repeat() == JOptionPane.NO_OPTION) { 
      System.out.println("goodbye world"); 
      break; 
     } 
    } 
} 

public static int repeat() { 
    int response = JOptionPane.showConfirmDialog(null, "Would you like to begin again?", 
      "Repeat?", JOptionPane.YES_NO_OPTION); 
    System.out.println(response); 
    return response; 
} 
0

Вы также можете сделать это таким образом.

if(JOptionPane.showConfirmDialog(null, "Bla bla", "Bla bla", JOptionPane) == 0){ 
     System.out.println("YES"); 
//The value zero represents index of first option which will be the YES option 
    } 
else if(JOptionPane.showConfirmDialog(null, "Bla bla", "Bla bla", JOptionPane) == 1){ 
     System.out.println("NO"); 
//The value one represents index of second option which will be the NO option 
    } 

Вы можете удалить номер индекса и заменить формат у вас есть, так что он звучит так:

if(JOptionPane.showConfirmDialog(null, "Bla bla", "Bla bla", JOptionPane) == JOptionPane.YES_OPTION){ 
     System.out.println("YES"); 
option 
    } 
else if(JOptionPane.showConfirmDialog(null, "Bla bla", "Bla bla", JOptionPane) == JOptionPane.NO_OPTION){ 
     System.out.println("NO"); 
option 
    } 

Вы можете посетить эту ссылку YouTube для получения дополнительной помощи JOptionPane Tutorial