2015-07-04 2 views
-1

Я хотел бы поделиться своим кодом. Но в моем университете код тестируется на «обман».Булевая петля в сочетании с JOptionPane Java

Но вот мой код в более простой форме.

public static String readin() { 
    boolean error = false; 
    do { 
     string stringin; 
     stringin = JOptionPane.showInputDialog(null, "Please enter a number"); 
     switch (stringin.length()) { 
      case 0: 
       JOptionPane.showMessageDialog(null, "Error Please repeat"); 
       error = true; 

      case 1: 
       return stringin; 
     } 
     return null; 
    } while (error == true); 
} 

Этот код действительно в самой простой форме. Я знаю, что для этого случая было бы разумнее установить время, пока JOptionPane пуст или что-то еще. Так как в моем коде есть 12 различных ошибок. Я хочу использовать boolean. Пожалуйста: нулевой символ возврата никогда не встретится в реальном коде.

Но реальная проблема у меня есть: она отлично работает, кроме того: если он повторяет цикл, он не дает мне возможность набрать новую строку. Как я могу это сделать?

Также я прошу прощения за свои ошибки на английском языке.

EDIT: Все ваши исправления устраняют мои проблемы! Большое спасибо! Мне нравится этот форум!

+2

У вас нет оператора break в вашем случае 0: блок, поэтому поток падает, хотя к случаю 1: блокируется и возвращается из вашей подпрограммы, поэтому цикл невозможен. –

+0

также перемещает ваш возврат в нуль после (error == true), и он будет работать. –

ответ

0

Попробуйте с перерыв перед тем case 1 (@Tuxxy_Thang) и удалить return null; перед тем while (error); и положить после.

public static String readin(){ 
    boolean error=false; 
    do{ 
     string stringin; 
     stringin=JOptionPane.showInputDialog(null,"Please enter a number"); 
     switch (stringin.length()){ 
      case 0: JOptionPane.showMessageDialog(null, "Error Please repeat"); 
       error=true; 
       break; 
      case 1: return stringin; 
     } 
    } while (error); 
    return null; 
} 
+0

По-прежнему нужен возврат после того, как компилировать –

+0

, пожалуйста, еще раз проверьте .. –

+0

Да, это работает, но весь метод носит сложный характер и искривлен возможностями ошибок внедрения imho –

0

Вы не должны проверить в то время как условия, как вы хотите, чтобы пользователь повторить again.Return только если у вас есть правильное значение еще раз спросить

public static String readin() { 
     while (true) { 
      String stringin = JOptionPane.showInputDialog(null, "Please enter a number"); 
      switch (stringin.length()) { 
       case 0: 
        JOptionPane.showMessageDialog(null, "Error Please repeat"); 
        break;//is important in switch cases 
       case 1: 
        return stringin; 
      } 
     } 
    } 
0

Есть две причины:

  • return null следует переместить в конец.
  • Там должен быть break заявления в конце первого случая

Я дал измененный код и он повторяет цикл, если пользователь не вводит ничего для JOptionPane:

public static String readin() { 
    boolean error = false; 
    do { 
     String stringin; 
     stringin = JOptionPane.showInputDialog(null, 
       "Please enter a number"); 
     switch (stringin.length()) { 
     case 0: 
      JOptionPane.showMessageDialog(null, "Error Please repeat"); 
      error = true; 
      break;      // **added** 
     case 1: 
      return stringin; 
     } 
    } while (error == true); 
    return null; // Moved here. It will return if user entered more than 1 letter. 
} 
0

вы делаете простую работу трудно, использовать классы Java должным образом, и вы будете иметь более легкое время вещей

public static String readin() 
{ 
    Boolean gettingNumber = true; 
    String stringin = null; 

    while (gettingNumber) 
    { 
     stringin = JOptionPane.showInputDialog(null, "Please enter a number"); 

     try 
     { 
      Integer number = Integer.parseInt(stringin); 
      gettingNumber = false; 
     } 
     catch (NumberFormatException exception) 
     { 
      // no need to do anything 
     } 

    } 

    System.out.println("returning [" + stringin + "]"); 
    return(stringin); 
} 

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

+0

Вы можете сократить это, добавив оператор return в блок try. Я не делал этого, потому что я ненавижу возвращаться куда-нибудь в коде, imho там shold только 1 retrun в конце метода. –

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