在双循环和切换情况下进行多次有效性检查



注意:

我不能使用java可能需要的任何高级方法或功能来解决这个问题。我主要局限于代码中的内容,我知道代码可能会更短、更干净,但对我来说,作为一个初学者,代码越短,我就越难理解,这就是为什么有这么多方法和循环等不先进的原因。

对于我的CCD_ 1方法,我找到了如何使用双循环来循环我需要的东西;从数组中的对象列表中找到对象的特定属性,例如学生、科目、注册人数;

现在,下一件事是有效性检查,在该检查中,我应该创建一个新的注册,从用户那里获取学生编号和科目代码。根据ArrayList中这些对象的属性进行检查,只有在学生编号和主题代码已经存在于ArrayList的对象属性中的情况下才注册。。。我知道我把它弄得很复杂,因为我不知道其他方法来解释这就是为什么我增加了我的整个班级。。。

for (int i=0 ; i<subjects.size() ; i++){
if (subjects.get(i).getCode().equals(newsub) )
{
enrolments.add(enrolment1);
System.out.println("A new enrolment for the student "+newstu+" on the subject "+newsub+" has been n" +
"added to the list.");
}
else if (i == subjects.size()-1)
{
System.out.println("Invalid subject code");
}
}

这个循环对受试者或学生进行有效性检查,但对两者都不起作用,因为两者的ArrayList中都有不同数量的值。

在这里,我尝试将我所需的两个条件都放入if((语句中,但外循环只能从一个ArrayList中获取其条件,所以我被这个卡住了

for (int i=0 ; i<subjects.size() ; i++){
if (subjects.get(i).getCode().equals(newsub) && students.get(i).getNumber() == newstu) 
{
enrolments.add(enrolment1);
System.out.println("A new enrolment for the student "+newstu+" on the subject "+newsub+" has been n" +
"added to the list.");
}
else if (i == subjects.size()-1)
{
System.out.println("Invalid subject code");
}
}

我在switch((语句中也有同样的问题,我想做一些事情,比如如果用户输入1-8以外的东西,它会说";输入无效";但同样不确定用switch((附加什么样的语句才能使其工作。

我已经在这个问题上坚持了一段时间,现在尝试了各种循环,我想还没有运气

所以有两个问题

一:是关于两个输入的有效性检查,同时做的正是for循环现在正在做的事情

第二:在开关((上使用有效性检查,以防用户输入不是1-8

这是我的Main类到目前为止的代码,除了我提到的有效性检查的问题外,Everythick工作得很好

非常感谢!!!

import java.sql.Array;
import java.util.ArrayList;
import java.util.Scanner;
import java.lang.*;
public class StudentEnrolmentSystem {
private ArrayList<Student> students;
private ArrayList<Subject> subjects;
private ArrayList<Enrolment> enrolments;
public StudentEnrolmentSystem() {
students = new ArrayList<Student>();
subjects = new ArrayList<Subject>();
enrolments = new ArrayList<Enrolment>();
}
public static void main(String[] args) {
StudentEnrolmentSystem ses = new StudentEnrolmentSystem();
ses.data();
while (true) {
ses.displaymenu();
}
}
public void displaySTU() {
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i).toString());
}
}
public void displaySUB() {
for (int i = 0; i < subjects.size(); i++) {
System.out.println(subjects.get(i).toString());
}
}
public void displayENR() {
for (int i = 0; i < enrolments.size(); i++) {
System.out.println(enrolments.get(i).toString());
}
}
public void searchSTU() {
Scanner Input = new Scanner(System.in);
System.out.println("Enter Student number :");
int input = Input.nextInt();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getNumber() == input) {
System.out.println(students.get(i).toString());
}
}
}
public void searchSUB(){
Scanner Input = new Scanner(System.in);
System.out.println("Enter Subject code :");
String input = Input.nextLine();
for (int i=0 ; i<subjects.size() ; i++){
if (subjects.get(i).getCode().equals(input)){
System.out.println(subjects.get(i).toString());
}
}
}
public void findEnrolment(){
Scanner Input = new Scanner(System.in);
System.out.println("Enter Student number :");
int input = Input.nextInt();
for (int i = 0; i < enrolments.size(); i++) {
if (enrolments.get(i).getNumber() == input) {
System.out.println(enrolments.get(i).toString());
}
}
}
public void newEnrolment(){
Scanner Input = new Scanner(System.in);
System.out.println("Input a student number:");
int newstu = Input.nextInt();
Scanner Input2 = new Scanner(System.in);
System.out.println("Input a subject code:");
String newsub = Input2.nextLine();
Enrolment enrolment1 = new Enrolment(newstu,newsub,"26/07/2022");
for (int i=0 ; i<subjects.size() ; i++){
if (subjects.get(i).getCode().equals(newsub) )
{
enrolments.add(enrolment1);
System.out.println("A new enrolment for the student "+newstu+" on the subject "+newsub+" has been n" +
"added to the list.");
}
else if (i == subjects.size()-1)
{
System.out.println("Invalid subject code");
}
}
}
public void displaymenu(){
Scanner Input = new Scanner(System.in);
System.out.println("1. Display all students");
System.out.println("2. Display all subjects");
System.out.println("3. Display all enrolments");
System.out.println("4. Find a student");
System.out.println("5. Find a subject");
System.out.println("6. Find a student's enrolments");
System.out.println("7. Add an enrolment");
System.out.println("8. Exit");
int input = Input.nextInt();
switch (input) {
case 1:
displaySTU();
break;
case 2:
displaySUB();
break;
case 3:
displayENR();
break;
case 4:
searchSTU();
break;
case 5:
searchSUB();
break;
case 6:
findEnrolment();
break;
case 7:
newEnrolment();
break;
case 8:
System.exit(-1);
break;
}
}
public void data () {
Subject CSCI213 = new Subject("CSCI213", "Java Programming & Object Oriented Design", 6,
"This subject provides an introduction to the Java language and some of its standard " +
"class libraries, you will have experience with object oriented design " +
"and implementation techniques",
"CSCI124 or CSCI121 or CSCI192", 3, 2);
Subject CSCI124 = new Subject("CSCI124", "Applied Programming", 6,
"This subject develops a thorough understanding of program design using data structures. " +
"It extends CSCI114 and presents pointers, dynamic memory management and exception handling",
"CSCI114 & CSCI103 or CSCI111 & CSCI103", 4, 2);
Subject CSCI235 = new Subject("CSCI235", "Database system", 6,
"This subject investigates three major areas of modern database systems:" +
" 1. design of relational databases 2. programming of relational databases",
"CSIT115", 3, 2);
Subject CSIT115 = new Subject("CSIT115", "Data management and security", 6,
"The subject investigates three major areas of modern data management systems:" +
" data modelling, data processing, and data security.",
"", 2, 2);
Subject CSIT111 = new Subject("CSIT111", "Programming Fundamentals", 6,
"The broad aim of this subject is to develop in students an understanding " +
"of the fundamental principles of programming.",
"", 2, 2);
Subject CSIT121 = new Subject("CSIT121", "Object oriented design and programming", 6,
"The aims of this subject are to consolidate and extend student's knowledge and skills" +
" in structured programming and to develop their understanding and " +
"practice of object oriented programming.",
"CSIT111 OR ENGG100", 2, 2);
Subject CSCI251 = new Subject("CSCI251", "Advanced programming", 6,
"This subject develops a thorough understanding of advanced programming features, " +
"and how to implement them in modern C++.",
"CSIT121", 3, 2);
subjects.add(CSCI213);
subjects.add(CSCI124);
subjects.add(CSCI235);
subjects.add(CSIT115);
subjects.add(CSIT111);
subjects.add(CSIT121);
subjects.add(CSCI251);
ArrayList<String> majors = new ArrayList<String>();
majors.add("Artificial Intelligence and Bing Data");
majors.add("Cyber Security");
Undergraduate s1 = new Undergraduate(100100, "Albert", "13/10/1965", "a100@uni.edu.au",
"12 Robert street Woonona NSW 2517", "12345678", "Bachelor of CS", majors);
Undergraduate s2 = new Undergraduate(100110, "Alvin", "13/10/1977", "a110@uni.edu.au",
"56 Marlo road Wollongong NSW 2500", "11223344", "Bachelor of CS", majors);
Undergraduate s3 = new Undergraduate(100120, "Alice", "17/06/1973", "a120@uni.edu.au",
"43 Collaery road Russell Vale NSW 2517", "12345677", "Bachelor of CS", majors);
Undergraduate s4 = new Undergraduate(100150, "Bob", "02/07/1960", "a150@uni.edu.au",
"23 Kendall street Wollongong NSW 2500", "12345688", "Bachelor of CS", majors);
Undergraduate s5 = new Undergraduate(100200, "Carl", "02/02/1967", "c200@uni.edu.au",
"44 Mount Keira road West Wollongong NSW 2500", "21345687", "Bachelor of IT", majors);
Undergraduate s6 = new Undergraduate(100250, "Douglass", "14/04/1983", "d250@uni.edu.au",
"78 Uralba street West Wollongong NSW 2500", "010123456", "Bachelor of CS", majors);
Undergraduate s7 = new Undergraduate(100101, "Peter", "13/11/1976", "p101@uni.edu.au",
"77 Gipps road Wollongong NSW 2500", "0102123456", "Bachelor of IT", majors);
Undergraduate s8 = new Undergraduate(100103, "Ami", "12/09/1985", "a103@uni.edu.au",
"51 Mackie street Coniston NSW 2500", "0242211234", "Bachelor of IT", majors);
Postgraduate s9 = new Postgraduate(100107, "Wendy", "12/09/1988", "w107@uni.edu.au",
"41 Wall street Wollongong NSW 2500", "0281234567", "Master of CS", Type.CourseWork);
Postgraduate s10 = new Postgraduate(100109, "Michael", "12/09/1990", "m109@uni.edu.au",
"112 Smith road Wollongong NSW 2500", "0242201234", "Master of CS", Type.CourseWork);
Postgraduate s11 = new Postgraduate(100125, "Angela", "20/11/1990", "a125@uni.edu.au",
"23 Gibsons road Figtree NSW 2525", "0201123456", "Master of IT", Type.CourseWork);
Postgraduate s12 = new Postgraduate(100105, "Robert", "15/01/1986", "r105@uni.edu.au",
"66 Risely road Figtree NSW 2525", "0202213123", "Master of IT", Type.CourseWork);
Postgraduate s13 = new Postgraduate(100136, "Aban", "15/01/1990", "a136@uni.edu.au",
"187 Princes Highway Wollongong NSW 2500", "0103123456", "Bachelor of IT", Type.Reserch);
Postgraduate s14 = new Postgraduate(100187, "Eadger", "07/04/1986", "e187@uni.edu.au",
"73 Ocean street Wollongong NSW 2500", "0104123321", "Master of Philosophy", Type.Reserch);
students.add(s1);
students.add(s2);
students.add(s3);
students.add(s4);
students.add(s5);
students.add(s6);
students.add(s7);
students.add(s8);
students.add(s9);
students.add(s10);
students.add(s11);
students.add(s12);
students.add(s13);
students.add(s14);
}

}

我认为,你可以使用流并对其进行过滤,比如这个

Optional<Stundent> optionalStudent = students
.stream()
.filter(s -> s.getNumber() == inputNumber) //assumption: your number field is int primitive type
.findAny(); //assumption: student number if unique and you are expecting to have maximum one record per student number
if(optionalStudent.isPresent()){
System.out.println("Student found: " + optionalStudent.get());
} else {
System.out.println("Student not found with given number: " + inputNumber);
}

ArrayList更改为Map<整数,学生>

通过学生编号设置

students.put(s1.getNumber(),s1);
students.put(s2.getNumber(),s2);
students.put(s3.getNumber(),s3);
students.put(s4.getNumber(),s4);
students.put(s5.getNumber(),s5);
students.put(s6.getNumber(),s6);
students.put(s7.getNumber(),s7);
students.put(s8.getNumber(),s8);
students.put(s9.getNumber(),s9);
students.put(s10.getNumber(),s10);
students.put(s11.getNumber(),s11);
students.put(s12.getNumber(),s12);
students.put(s13.getNumber(),s13);
students.put(s14.getNumber(),s14);

键获取学生->学生人数

public void searchSTU() {
Scanner Input = new Scanner(System.in);
System.out.println("Enter Student number :");
int input = Input.nextInt();
System.out.println(students.get(input).toString());
}

感谢您的所有评论和回答,但我的问题仅限于我可以用来解决这个问题的方法,这是由于其中一条评论而对我起作用的双循环!

根据我的理解总结一下,这个循环遍历对象的一个特定属性,将其与用户输入进行比较,并为数组列表中的每个对象查找匹配的对象。。希望这也能帮助其他人

干杯!

for (int i = 0; i < students.size(); i++) {
if (students.get(i).getNumber() == input) {
System.out.println(students.get(i).toString());
}
}

相关内容

最新更新