2013-12-05 6 views
0

Мне нужно написать программу, имеющую 3 параллельных массива, одну из которых содержит четырехзначный идентификатор студента, второй - имя ученика, а последнее, которое содержит GPA, и размер массивов должен быть 10 также программа будет в состоянии сделать поиск Student ID, и если оно не существует, чтобы показать сообщение об ошибкеПоиск элемента в массиве

первая часть работает нормально, но когда дело доходит до поиска он не работает

import java.util.ArrayList; 

import javax.swing.JOptionPane; 

import java.util.Scanner; 

public class StudentIDArray 
{ 

public static void main(String[] args) 
{ 
    int option; 
    String inputString; 
    inputString = JOptionPane.showInputDialog("Welcome" 
      +" Choose the option you will like" 
      + " \n1. Enter Student Information " 
      + "\n2. Search for Student"); 
    option = Integer.parseInt(inputString); 

    if(option ==1) 
    { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Enter the name of the Student"); 
     String[] studentname = new String[10]; 

     for(int i =0; i<studentname.length; i++) 
     { 

      studentname[i] = in.nextLine(); 
     } 

     System.out.println("Enter the 4 digit Student ID"); 
     int[] studentID = new int[10]; 
     for(int x=0; x<studentID.length; x++) 
     { 
      studentID[x] = in.nextInt(); 
     } 



     System.out.println("Enter the Student's Grade Point Average"); 
     int[] gpa = new int[10]; 
     for(int y=0; y<studentID.length; y++) 
     { 
      gpa[y] = in.nextInt(); 
     } 
    } 
    else 
    { 
     searching(); 
    } 




} 

public static void searching() 
{ 

    int idnumber, 
     results; 
    int[]studentID = null; 

    String inputString; 
    inputString = JOptionPane.showInputDialog("Please Enter the ID number"); 
    idnumber = Integer.parseInt(inputString); 

    results = sequentialSearch(studentID, idnumber); 
    if (results == -1) 
    { 
     System.out.println("no information"); 
    } 
    else 
    { 
     System.out.println("yeii congrats"); 
    } 

} 


public static int sequentialSearch(int[] studentID, int value) 
{ 
     int index; 
     int element; 
     boolean found; 

     index =0; 

     element = -1; 
     found = false; 

     while(!found && index < studentID.length) 
     { 
     if (studentID[index] == value) 
     { 
      found = true; 
      element = index; 
     } 
     index++; 
     } 
     return element; 

    } 
} 
+0

Легче ли это понять сейчас? – user3058890

+0

Можете ли вы уточнить некоторые моменты? Когда вы хотите, чтобы пользователь набирал имя или идентификатор студента, должен ли пользователь вводить символ по символу? Вы упомянули, что их нужно хранить в массивах, а массивы должны принимать максимум 10 элементов. Но вам нужен 4-значный идентификатор от пользователя, но вы все равно хотите ввести 10 пользователей. Я думаю, что вы ошиблись в массиве «10 элементов». Может ли быть «размер ввода не должен превышать 10 символов»? Вы хотите выполнить поиск ранее сохраненных данных студента, но вы не сохранили эти данные в объекте, и когда вы хотите выполнить поиск, вы не выполняете поиск из любого места. Рассмотрите возможность изменения этих фатальных ошибок. –

ответ

0

основной вопрос заключается в том, что вы объявляете массив studentID локально вашим методам.

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

public class StudentIDArray 
{ 
    private static int[] studentID = new int[10]; 
    ... 

Примечания что это ограничивает количество записей размером массива, и вы получите исключения, если вы превысите эти пределы. Вместо этого используйте вместо этого Vector или ArrayList.

0
searching(studentID); 

Передайте массив studentID методу поиска, а не объявляйте его снова.

public static void searching(int[] studentID) 
{ 

    int idnumber, 
     results; 
    //int[]studentID = null; 

    String inputString; 
    inputString = JOptionPane.showInputDialog("Please Enter the ID number"); 
    idnumber = Integer.parseInt(inputString); 

    results = sequentialSearch(studentID, idnumber); 
    if (results == -1) 
    { 
     System.out.println("no information"); 
    } 
    else 
    { 
     System.out.println("yeii congrats"); 
    } 

} 


public static int sequentialSearch(int[] studentID, int value) 
{ 
     int index; 
     int element; 
     boolean found; 

     index =0; 

     element = -1; 
     found = false; 

     while(!found && index < studentID.length) 
     { 
     if (studentID[index] == value) 
     { 
      found = true; 
      element = index; 
     } 
     index++; 
     } 
     return element; 
    } 

Лучшим подходом было бы сохранить его как переменную статического/класса, как указал @Andreas.

0

Это следующие шаги программы ....
Первый шаг => Введите размер массива.
Второй шаг => Введите член массива.
Третий шаг => Введите поиск целых чисел массива.

 import java.util.Scanner; 

     public class Searching 
     { 
      public static void main(String[] args) 
      { 
       int temp =-1; 
       Scanner user_input=new Scanner(System.in); 
       System.out.println("Enter Size Of Array "); 

       int Size=user_input.nextInt(); 
       int[] a=new int[Size]; 
       //Scan input Array. 
       System.out.println("Enter element Of an Array..."); 
       for(int j=0;j<Size;j++) 
       { 
        a[j]=user_input.nextInt(); 
       } 

       System.out.println("The contents of the Array are :"); 
       //Print input Arrray 
       for(int i=0;i<a.length;i++) 
       { 
        System.out.println("array[" + i + "] = " + a[i]); 
       } 

       System.out.println("Enter Integer For Searching.."); 
       int Search=user_input.nextInt(); 
       //Searching in an Array. 
       for(int index=0;index<a.length; index++) 
       { 
        if(a[index]==Search) 
        { 
         temp=index; 
         break; 
        } 
       } 
       if(temp!=-1) 
       { 
        System.out.println(" The search element is : " + Search); 
        System.out.println(" It is found in the array at position : " + temp);  
       } 
       else 
        System.out.println("\n Element not Found.."); 
      } 
     } 
Смежные вопросы