2015-03-05 3 views
0

Любой, кто может меня направить в правильном направлении. Я создаю простую программу маркировки, где я получаю входной сигнал от сканера и вставляю его в свой 2D-массив. Я хочу проверить свой ввод так, чтобы он не был ниже 0 или выше 100, но если у меня есть неправильный номер, я не хочу, чтобы массив переместился в следующую позицию.Проверка достоверности 2D-массива

public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in);//naming the scanner 
    String [] student = {"Mark","Jen","Gaby","John","Michael","James"}; 
    String [] subject = {"Digital electronics","Analogue electronics","Maths","Networks","Telecommunications", 
      "Computer applications","Software developemnt","Workshop"}; 
    String [] printSub = {"Digit","Analo","Maths","Netwo","Telec","Appli","Softw","Works"}; 
    int maxRow = 6;//setting max row amount int 
    int maxCol = 8;//set max column amount int 
    int [][] mark = new int [maxRow][maxCol];//declaring the int array and setting the row & column max. 
    int i = 0, j = 0;//declaring i and j for use in the for loops 
    int maxMark = 0;//declaring for use in if statement to find highest mark 
    int minMark =100;//Declaring for use in if statement to find lowest mark 

    for(i = 0; i < maxRow; i++) 
    { 
     for(j = 0; j < maxCol; j++) 
     { 
      System.out.print("Please enter "+student[i]+" mark for "+subject[j]+" and press return :"); 
      mark[i][j]= input.nextInt(); 
     } 
    } 

    for(i=0; i < maxRow; i++) 
    {   
     for(j=0; j < maxCol; j++) 
     { 
      if (i == 0 && j == 0) 
      { 
       System.out.print("Student \t"); 
       for(int sub = 0; sub < 8; sub++) 
       { 
        System.out.print(printSub [sub]+"\t"); 
       } 
       System.out.println(); 
       System.out.println(); 
      } 
      if(i < maxRow && j == 0) 
      { 
       System.out.print(student[i]+"\t \t "); 
      } 

      System.out.print(mark [i][j]+"\t"); 
     } 
     System.out.println(); 
     System.out.println(); 
    } 
} 

Я не ищу ответ Ищу больше толчка в направлении, где я могу быть в состоянии выяснить, то ответ сам.

Спасибо за помощь заранее.

Matt

ответ

0

Сдвинуть: Вы не непосредственно вставить число в массив, вставить ее в какую-то временную переменную, проверяет ее, а затем решить, если вы сохраните его или переспросить (в то время как цикл требуется)


Спойлер 1: Вот полное решение, если вы хотите сделать это самостоятельно, не смотри там :):

for (i = 0; i < maxRow; i++) { 
     for (j = 0; j < maxCol; j++) { 
      System.out.print("Please enter "); 
      int number = input.nextInt(); 
      boolean isItOk = false; 
      while (isItOk == false) { 
       if (number < 0 || number > 100) { 
        System.out.println("You shall not insert a value below 0 or bigger than 100! Try it again"); 
        number = input.nextInt(); 
       } else { 
        isItOk = true; 
       } 
      } 
      mark[i][j] = number; 
     } 
    } 

Spoiler 2: Это немного более приятный код, но для новичков я бы рекомендовал подход Spoiler 1, потому что он всегда можно использовать. В более сложных задачах решение Spoiler 2 не всегда возможно.

for (i = 0; i < maxRow; i++) { 
     for (j = 0; j < maxCol; j++) { 
      System.out.print("Please enter "); 
      int number = input.nextInt(); 
      while (number < 0 || number > 100) { 
       System.out.println("You shall not insert a value below 0 or bigger than 100! Try it again"); 
       number = input.nextInt(); 
      } 
      mark[i][j] = number; 
     } 
    } 
0
Scanner s = new Scanner(System.in); 
    int number =0; 
    System.out.print("Please enter "); 
    while(true) 
    { 
     number = s.nextInt(); 
     if(number > -1 && number < 101) 
      break; 
     System.out.println("Marks should be between 0 and 100, Please enter"); 

    } 

Кроме того, необходимо проверить, если вход целое число, которое может быть сделано путем обработки исключений

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