2016-03-29 15 views
0
package test5555; 
import java.util.InputMismatchException; 
import java.util.Random; 
import java.util.Scanner; 

public class Test5555 { 

private static int[] randomInteger; 

public static void main(String[] args) { 

boolean validInput = false; 
randomInteger = new int[100]; 
Random rand = new Random(); 
for (int i = 0; i < randomInteger.length; i++) 
randomInteger[i] = rand.nextInt(); 
int indexPosition = 0; 

Scanner input = new Scanner(System.in); { 
System.out.println("Please enter an integer for the array index position: "); 

while(!validInput) 
{ 
try 
{ 

indexPosition = input.nextInt(); 
validInput = true; 

System.out.println(randomInteger[indexPosition]); 
} catch (InputMismatchException | IndexOutOfBoundsException ex) { 

System.out.print("Please enter a valid integer between 0 and 100 or type quit to exit: "); 

String s = input.next(); 
if(s.equals("quit")){ 
System.exit(0);  
System.out.println(randomInteger[indexPosition]); 
} 
} 
} 
} 
} 
} 
  • kod mükemmel ben çözemem iki küçük hıçkırık dışında çalışır. Çalıştırdığınızda, Please enter an integer for the array index position: olsun. 100'ün üzerinde bir sayı veya bob gibi bir dize yazarsanız, Please enter a valid integer between 0 and 100 or type quit to exit:'u mükemmel olarak alırsınız. Ancak, quit yazarsanız, Please enter a valid integer between 0 and 100 or type quit to exit: BUILD SUCCESSFUL (total time: 2 minutes 2 seconds)'u alırsınız, böylece onu bırakır, ancak istemediğim özel durum ifadesini yineler.minik bir sorunu - değil doğru çıktı

  • 100'le üstünde bir sayı yazın ve sonra programı sadece kapanacaktır doğru tamsayı yazın ve diziden sizin için sayısı alınırken ait BUILD SUCCESSFUL yerine diyecekler eğer Please enter a valid integer between 0 and 100 or type quit to exit: almak

cevap

0

String s = null; 
while(!validInput) 
{ 
try 
{ 
if(s != null){ 
    indexPosition = Integer.parseInt(s); 
} 
else{ 
indexPosition = input.nextInt(); 
} 
System.out.println(randomInteger[indexPosition]); 
validInput = true; 
} catch (InputMismatchException | NumberFormatException | IndexOutOfBoundsException ex) { 

System.out.println("Please enter a valid integer between 0 and 100 or type quit to exit: "); 
input.nextLine(); 
s = input.next(); 
if(s.equals("quit")){ 
System.exit(0); 
} 
} 
} 

Scanner fazla fikir edinmek için bu okuyunuz aşağıya ile while döngüsü kodunu değiştirin. Senin durumunda https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

sorun alınabilir, böylece

bir tarayıcı bir InputMismatchException atar

, tarayıcı, özel duruma neden jetonu geçemez olacak (doc gereğince) 'dir veya başka bir yöntemle atlanır.

+0

Teşekkür ederim mükemmel çalıştı – archer

0
  • 1 numaralı noktada anlattığınız davranış doğru değil. Bir sayı yazıp çıktıktan sonra "beklendiği gibi" çalışıyorsa
  • "bob" gibi bir dize yazarsanız, nextInt() adınız bir InputMissmatchException ile başarısız olur, bu da "input.next()" çağrınız anlamına gelir. catch cümlesi "bob" okuyacaktır ve "bırakma" ile eşit olmadığını görüp sadece dönüp bloğa geri dönüp "int" değerini beklemesini görecektir.

    • 2. nokta. Bir int yazıyorsunuz ve bir istisna alıyorsunuz ... ancak validInput değerini true olarak ayarladığınız için, döngüden çıkacaksınız. Yazdırdıktan sonra validInput ayarlamanız gerekir. Sorunuzu doğru var ise
0

, ben farklı küçük uygulamaya koyacak. Lütfen ihtiyacınızı karşılayıp karşılamadığını kontrol edin.

import java.util.Random; 
import java.util.Scanner; 

public class Test5555 { 

    private static int[] randomInteger; 

    public static void main(String[] args) { 

     randomInteger = new int[100]; 
     Random rand = new Random(); 
     int indexPosition; 

     for (int i = 0; i < randomInteger.length; i++) 
      randomInteger[i] = rand.nextInt(); 


     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter an integer for the array index position: "); 

     while(true) { 
      String strIndex = input.next(); 
      if(strIndex.equals("quit")) break; 
      indexPosition = getIntVal(strIndex); 

      if(indexPosition < 0 || indexPosition >= randomInteger.length) { 
       System.out.print("Please enter a valid integer between 0 and " 
          + randomInteger.length + " or type quit to exit: "); 
       continue; 
      } 

      System.out.println(randomInteger[indexPosition]); 
      break; 
     } 

     input.close(); 
    } 

    protected static int getIntVal(String inputStr) { 
     int result = -1; 
     try { 
      result = Integer.parseInt(inputStr); 
     } catch(NumberFormatException e) {} 
     return result; 
    } 

} 
+0

Mükemmel çalışıyor ve benim gereksinimimi yerine getiriyor teşekkürler – archer

0

kodunuzun bu bölümü indexPosition bunu kontrol etmek hemen önce olduğu için

validInput = true; 

sonra eğer çek olmalı, çizgi söylediğini

try 
{ 

indexPosition = input.nextInt(); 
validInput = true; 

System.out.println(randomInteger[indexPosition]); 
} catch (InputMismatchException | IndexOutOfBoundsException ex) { 

yanlıştır dizi bu pozisyona sahip.

Sağ kodu:

... 
indexPosition = input.nextInt(); 
System.out.println(randomInteger[indexPosition]); 
validInput = true; 
.... 
İlgili konular