2016-09-08 2 views
1

Так что я до сих пор довольно новичок в Java, и это тоже было время, поскольку я запрограммирован на Java. Я хочу знать, как назначить целое число, например номер студента, элементу в списке массивов. У меня есть три элемента в моем arraylist, и каждый элемент должен иметь 7-значный номер ученика с 7-й цифрой в качестве следующего числа в последовательности (например, el 1 с номером ученика 1234567, el 2 с 1234568, el 3 с 1234569). Я не уверен, что я на правильном пути или нет. Этот код работает, и есть много вещей, которые мне еще нужно добавить или исправить. Мой arraylist находится в следующем блоке кода под названием StudentApp.Назначение инкрементирования int элементу в arraylist, Java

public class Student { 

    //fields 
    private String firstName; 
    private String lastName; 
    private int sNumber; 
    private String major; 
    private double gpa; 

    private static int count() { 
     int count = 1234567; 
     for (int i = 1; i <= count; i++) { 
      System.out.print(count); 
     } 
     return count; 
    } 

    //constructors 
    public Student() { 
     firstName = null; 
     lastName = null; 
     sNumber = 1234567; 
     major = null; 
     gpa = 0.0; 

    } 

    public Student(String fName, String lName, int sNumber, String maj, double gpa) { 
     firstName = fName; 
     lastName = lName; 
     sNumber = sNumber; 
     major = maj; 
     gpa = gpa; 
    } 

    //methods 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public int getsNumber() { 
     for(int sNumber = 0; sNumber >= 7; sNumber++) { 
      int sNumber = 1234567; 
      sNumber++ 
     } 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getMajor() { 
     return major; 
    } 

    public void setMajor(String major) { 
     this.major = major; 
    } 

    public double getGpa() { 
     return gpa; 
    } 

    public void setGpa(double gpa) { 
     this.gpa = gpa; 
    } 

    @Override 
    public String toString() { 
     return "S" + sNumber + " " + firstName + " "+ lastName + " " + "(" + major +")" + " " + "gpa:" + gpa; 
    } 
} 

import java.util.Scanner; 
import java.util.ArrayList; 

public class StudentApp { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     ArrayList<Student> names = new ArrayList<Student>(); 

     Student student1 = new Student(); 
     student1.setFirstName("Brian"); 
     student1.setLastName("Scholl"); 
     student1.setMajor("CS"); 
     student1.setGpa(3.5); 

     Student student2 = new Student(); 
     student2.setFirstName("Emily"); 
     student2.setLastName("Davies"); 
     student2.setMajor("ME"); 
     student2.setGpa(3.7); 

     Student student3 = new Student(); 
     student3.setFirstName("Sarah"); 
     student3.setLastName("Dixon"); 
     student3.setMajor("EE"); 
     student3.setGpa(3.8); 

     names.add(student1); 
     names.add(student2); 
     names.add(student3); 

     int choice; 
     do{ 
      displayMenu(); 
      choice = input.nextInt(); 
      switch(choice) { 
      case 1: 
       Student student4 = new Student(); 

       System.out.print("First name: "); 
       String fName1 = input.nextLine(); 
       System.out.println(); 
       System.out.print("Last name: "); 
       String lName1 = input.nextLine(); 
       System.out.println(); 

       System.out.print("Major: "); 
       String major1 = input.nextLine(); 
       System.out.println(); 
       System.out.print("GPA: "); 
       double gpa1 = input.nextDouble(); 

       student4.setFirstName(fName1); 
       student4.setLastName(lName1); 
       student4.setMajor(major1); 
       student4.setGpa(gpa1); 
       names.add(student4); 
       break; 
      case 2: 

       System.out.print("Find student with sNumber S"); 
       input.nextInt(); 
       student1.getsNumber(); 
       //statement on finding a student 
       break; 
      case 3: 
       //statement on deleting a student 
       break; 
      case 4: 
       System.out.println(student1); 
       System.out.println(student2); 
       System.out.println(student3); 
       break; 
      case 5: 
       names.size(); 
       break; 
      case 6: 
       System.out.println("Good bye"); 
       break; 
      default: 
       System.out.println("Invalid Selection"); 
       System.out.println(); 
       break; 
      } 
      System.out.println(); 
     }while(choice != 0); 


    } 

    public static void displayMenu() { 
     System.out.println("1. Add a student"); 
     System.out.println("2. Find a student"); 
     System.out.println("3. Delete a student"); 
     System.out.println("4. Display all students"); 
     System.out.println("5. Display the total number of students"); 
     System.out.println("6. Exit"); 
    } 

} 
+2

Я не вижу массив в вашем коде ... и этот цикл ничего не делает. – alfasin

+0

Просто добавьте переменную, инициализированную начальным номером ученика, затем увеличивайте ее каждый раз, когда вы добавляете нового ученика. Вы также сохраните код, используя созданный вами конструктор. 'names.add (new Student (...));' – ChiefTwoPencils

+0

@alfasin, когда я прокручиваю вниз theres arraylist в главном – aldr

ответ

0

Нет причин пытаться сделать это так, как вы. Учтите, что вы можете просто определить начальный номер ученика; согласно вашему коду, я бы предположил, что это будет int studentNumber = 1234567;.

Теперь, когда вы добавляете ученика в список, не пренебрегайте добавлением этого числа или инициализацией всех учащихся с одинаковым числом; это просто осложняет ситуацию.

Учитывая, что у вас теперь есть номер, получите другую информацию от пользователя и добавьте новый Student с этими значениями плюс номер студента, который вы им назначаете. Например:

names.add(new Student(firstName, lastName, studentNumber++, major, gpa));

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

  1. Счет не должен поступать из экземпляра учащегося.
  2. Получение номера студента должно просто дать номер студента (теперь, когда вы это выяснили)
  3. Позаботьтесь, когда вы назначаете параметры конструктора так же, как переменные экземпляра; вам нужно как-то различать их.
  4. Вы не можете жестко указать вывод всех учеников; они могут добавить больше.
+0

Если вы укажете, что проблемы с кодом начинаются с дизайна: выше всего требуется полная редизайн, а не пара исправлений здесь и там, как предлагает автор. Поставка технических идентификаторов в конструктор не является блестящей идеей IMHO. В идеале нужно иметь отдельный и постоянный идентификационный сервис, который каждый конструктор таких объектов вызывает для получения нового уникального идентификатора. В противном случае просто используйте UUID, но снова внутренне. –

+0

@OlegSklyar, полный переиздание? Вряд ли какой-либо дизайн. Это один класс с основными членами. Большинство ошибок в классе связаны с их проблемой со студенческим номером, другие - не вопрос дизайна, а недопонимание. Что касается приложения, конечно, это не идеальное, но, очевидно, стремление ученика и, скорее всего, ограниченное или ориентированное на темы, изученные до сих пор, о которых я не знаю, поэтому я не собираюсь идти за пределы вопроса , – ChiefTwoPencils

+0

@OlegSklyar, чтобы добавить еще после редактирования, я думаю, вы должны рассмотреть вопрос и сохранить свой вклад для вопроса, требующего таких механизмов; это явно не так, и этот вопрос не начинает предлагать или явно просить об этом. Благодарю. – ChiefTwoPencils

2

Добавить статический атрибут (studentNumberSequence) в класс Student с инициализирующим значением (например, 1234567) и увеличить его значение в конструкторах. Вы можете поместить следующую строку в конструкторах:

sNumber = studentNumberSequence++; 

Я предлагаю вам использовать карту (например HashMap) вместо ArrayList и применять «sNumber» в качестве ключа карты.

+0

Помимо того, что это будет сбрасываться при каждом перезапуске приложения и что оно должно быть изменчивым, что будет делать. –

+0

Согласитесь, но это элементарное приложение и нужно элементарное решение :) –

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