2015-04-17 39 views
7

içinde iki veya uzun olup olmadığını nasıl kontrol edeceğim Java'da yeni başlayan biriyim. Kullanıcı girişi String veya Double veya int ise önce kontrol etmek istiyorum. Dize, çifte veya eksi numarasıysa, kullanıcının tekrar geçerli bir int numarası girmesi istenmelidir. Sadece kullanıcı geçerli bir sayı girdiğinde programın denemesi için atlama yapmalıdır. Saatlerce düşünüyordum ve işe yarar bir şeyle gelmiyorum. Lütfen yardım edin, teşekkürler!Kullanıcı girdisi Dize, Java

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class Fizz { 

public static void main(String[] args) { 

    System.out.println("Please enter a number"); 

    Scanner scan = new Scanner(System.in); 

    try { 

     Integer i = scan.nextInt(); 

     if (i % 3 == 0 && (i % 5 == 0)) { 
      System.out.println("FizzBuzz"); 
     } else if (i % 3 == 0) { 
      System.out.println("Fizz"); 
     } else if (i % 5 == 0) { 
      System.out.println("Buzz"); 
     } else { 
      System.out.println(i + "は3と5の倍数ではありません。"); 
     } 
    } catch (InputMismatchException e) { 
     System.out.println(""); 

    } finally { 
     scan.close(); 
    } 

} 
+0

Yardımlarınız için teşekkür ederiz! Ama kodu nereye eklemeliyim? Eklemeye çalıştım ve bir hata alıyorum. Kodunuzu kodunuza ekledikten sonra lütfen cevap verir misiniz? Tekrar teşekkürler! – user4799681

+0

@TheLostMind tarafından kod ile "Tamsayı i = scan.nextInt();" satırını değiştirin ve onun bloğundan sonra ('unı sonra onun kodunu unutma) int = Integer satırını ekleyin. parseInt (s); ' – halex

+0

Çok teşekkürler! Şimdi derler ve iyi çalışır! – user4799681

cevap

8

Basit bir düzeltme, tüm satır/kullanıcı girişini bir Dize olarak okumaktır. Bunun gibi bir şey işe yaramalı. (Test Kodu):

String s=null; 
    boolean validInput=false; 
    do{ 
     s= scannerInstance.nextLine(); 
     if(s.matches("\\d+")){// checks if input only contains digits 
     validInput=true; 
     } 
     else{ 
     // invalid input 
    } 
    }while(!validInput); 
+0

Girdi bir sayı değilse Scanner.nextInt bir istisna alamaz mıydı? Bu istisnayı yakalamak daha doğru olur mu? –

+0

@JayanthKoushik - Ama bunu yapmak için doğru yol bu değil. :) .. Onlar olmadan kod çalıştırabilirsiniz neden istisnaları yakalamak? – TheLostMind

+0

@JayanthKoushik Dize bir tamsayı ile başlayabilir, ancak başka karakterler de içerebilir. Ve bu nedenle, bir çiftin verilip verilmediğini de kontrol etmez, çünkü tamsayı sonunda kesilir. Ayrıca daha fazla girdiyi de bozardı. –

1

Ayrıca, Integer.parseInt'i kullanabilir ve ardından negatif olmayan bir tamsayıyı da kontrol edebilirsiniz. Eğer giriş dize veya çift ise NumberFormatException'ı yakalayabilirsiniz.

Scanner scan = new Scanner(System.in); 
try { 
    String s = scan.nextLine(); 
    int x = Integer.parseInt(s); 
} 
catch(NumberFormatException ex) 
{ 
} 
+0

Negatif tam sayılardan ne haber? – TheLostMind

+0

Tam sayı olup olmadığını kontrol ettikten sonra negatif tamsayılar için ek kontrol gerekir. –

0

Bunu deneyin. Girişi belirtmek için bazı koşullar kullandım.

0

Bunu deneyin. Bir int 0'dan büyük girilene kadar giriş için istemde bulunur:

System.out.println("Please enter a number"); 

try (Scanner scan = new Scanner(System.in)) { 
    while (scan.hasNext()) { 
     int number; 
     if (scan.hasNextInt()) { 
      number = scan.nextInt(); 
     } else { 
      System.out.println("Please enter a valid number"); 
      scan.next(); 
      continue; 
     } 

     if (number < 0) { 
      System.out.println("Please enter a number > 0"); 
      continue;   
     } 

     //At this stage, the number is an int >= 0 
     System.out.println("User entered: " + number); 
     break; 
    } 
} 
0
boolean valid = false; 
double n = 0; 
String userInput = ""; 
Scanner input = new Scanner(System.in); 

while(!valid){ 
    System.out.println("Enter the number: "); 
    userInput = input.nextLine(); 

    try{ 
     n = Double.parseDouble(userInput); 
     valid = true; 
    } 
    catch (NumberFormatException ex){ 
     System.out.println("Enter the valid number."); 
    } 
}