2017-01-07 4 views
0

Я должен получить радиус целого радиуса от пользователя, а затем отобразить область и окружность круга. Если пользователь вводит отрицательное целое число или что-то другое, отличное от целого (a или 5.6), он просит пользователя повторно ввести.Включите сканер в JOptionPane

Ниже приведен код для ввода неправильных входов, но он использует сканер, и мне нужно использовать JOptionPane.

import java.util.Scanner; 

public class GetCircle { 
public static void main(String[] args) { 
Scanner input = new Scanner(System.in); 
    int radius = 0; 
    System.out.print("Please enter size of radius (Must be integer): "); 
    while (true){ 
     if(input.hasNextInt()){ 
     radius = input.nextInt(); 
     if (radius < 0){ 
      System.out.println("That is not a valid number, please try again :"); 

     } else { 
     System.out.println("The radius is: " + radius); 
     } 
     } else { 
      System.out.println("That is not a valid number, please try again :"); 

      input.next(); 

     } 
    } 
} 
} 

Я не знаю, как использовать hasNextInt с JOptionPane .... может ли кто-нибудь помочь?

вот что у меня есть для JOptionPane сейчас:

import javax.swing.JOptionPane; 

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

    String radius = JOptionPane.showInputDialog(null,"Enter 
Radius","Radius",JOptionPane.QUESTION_MESSAGE); 

    Integer.parseInt(radius); 

    JOptionPane.showMessageDialog(null,"the string you entered is: " + radius, "results",JOptionPane.PLAIN_MESSAGE); 

    } 
} 
+0

Ваш вопрос немного неясен, какова связь между JPanel и hasNextInt и, и что вы хотели сделать именно? –

+0

Когда я использую JPanel, я не знаю, как принимать только положительное целое число, как я делаю со сканером и hasnext.Input – Brow

+0

вы имеете в виду 'JOptionPane', а не JPanel? –

ответ

0

Я думаю, что нужно что-то вроде этого:

вам нужно проверить вход, если вход является целым числом, то показать успех сообщение, в противном случае появляется сообщение об ошибке:

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

public static void main(String[] args) { 
    while (true) { 
     String radius = JOptionPane.showInputDialog(null, "Enter Radius", "Radius", JOptionPane.QUESTION_MESSAGE); 
     if (radius.equals("#")) { 
      break; 
     } else { 
      if (test(radius)) { 
       JOptionPane.showMessageDialog(null, "the string you entered is: " + radius, "results", JOptionPane.PLAIN_MESSAGE); 
      } else { 
       JOptionPane.showMessageDialog(null, "the string you entered is: " + radius, "results", JOptionPane.ERROR_MESSAGE); 
      } 
     } 
    } 

} 

public static boolean test(String s) { 
    try { 
     Integer i = Integer.parseInt(s); 
     return true; 
    } catch (Exception e) { 
     return false; 
    } 
} 

NB

Если вы хотите, чтобы выйти вам нужно проверить с определенной строки, например #

Редактировать

public static void main(String[] args) { 
    while (true) { 
     String radius = JOptionPane.showInputDialog(null, "Enter Radius", "Radius", JOptionPane.QUESTION_MESSAGE); 
     System.out.println(radius.length()); 
     if (radius.equals("#")) { 
      break; 
     } else { 
      if (test(radius, 10)) { 
       if(Integer.parseInt(radius)<0){ 
        JOptionPane.showMessageDialog(null, "Negative int: " + radius, "results", JOptionPane.ERROR_MESSAGE); 
       }else{ 
        JOptionPane.showMessageDialog(null, "the string you entered is: " + radius, "results", JOptionPane.PLAIN_MESSAGE); 
       } 

      } else { 
       JOptionPane.showMessageDialog(null, "the string you entered is: " + radius, "results", JOptionPane.ERROR_MESSAGE); 
      } 
     } 
    } 

} 

public static boolean test(String s, int radix) { 
    Scanner sc = new Scanner(s.trim()); 
    if (!sc.hasNextInt(radix)) { 
     return false; 
    } 
    sc.nextInt(radix); 
    return !sc.hasNext(); 
} 

Вы можете узнать больше о том, что здесь: Determine if a String is an Integer in Java

Надеюсь, это может вам помочь.

+0

спасибо пожалуйста sir. К сожалению, я новичок, и мы еще не научились пробовать и поймать, и я не думаю, что я должен использовать его еще. я надеялся, что был аналогичный способ, который я сделал со Сканером, что я мог бы сделать это с помощью JOptionPane ... – Brow

+0

@Brow Я отредактировал свой ответ, теперь вы можете проверить, что я тестирую вход со сканером, надеюсь, что это может вам помочь. –

+0

@Brow Я уже проверил на отрицательный int, вы можете проверить сейчас, удачи –

0

Первое решение - это сканер, который вы хотите для него графический пользовательский интерфейс, поэтому хотите использовать JPanel? Ключ - следующий() или hasNextInt() - это идентификатор пустым, поэтому можно повторить ввод или тест, но в JPanel как LAIDANI Youcef show http://alvinalexander.com/sites/default/files/users/user3/joptionpane-show-input-dialog-example-1.png он может вводить только один раз.

0

Integer#parseInt(String s) исключает исключение исключения NumberFormatException, если строка не является синтаксическим методом. Это то, что вам нужно.

try{ 
    int radiusInt = Integer.parseInt(radius); 
    // everything's OK, it's an integer 
} catch(NumberFormatException e){ 
    // it is not an integer 
}