为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止用户两次输入相同的文本

如何防止用户两次输入相同的文本

红颜莎娜 2022-09-28 10:07:15
该程序基本上通过让用户输入课程数量和课程代码来计算gpa,并带有相关的学分和分数。如果课程代码输入两次,将显示一条消息(课程已注册),并且它将一直循环,直到用户使用不同的课程代码输入所有课程我创建了两种方法。一个用于检查代码是否已注册,另一个用于计算gpa,这是检查用户输入的第一种方法,我不确定。因为如果我输入课程代码两次,它只会显示消息,并允许我计算其余部分public static boolean checkCourse(String[] courseList, String code){    boolean check = false;    for(int i=0 ; i < courseList.length; i++){        if(code.equals(courseList[i]))             check = true;        else            check = false;     }     return check;}public static double gradeValue(double marks){     double grade = 1.0;     if(marks >=95){ grade = 5.0;}     else if (marks >= 90) { grade = 4.75;}     else if (marks>=85) { grade = 4.5;}     else if (marks >= 80) { grade = 4.0;}     else if (marks >= 75) { grade = 3.5; }     else if (marks >= 70) { grade = 3.0;}     else if (marks >= 65) {grade = 2.5 ;}     else if (marks >= 60) { grade = 2;}     else if (marks < 60) { grade =1 ;}      return grade;}public static void main(String[] args) {    Scanner input = new Scanner(System.in);    System.out.print("Enter number of courses: ");    int n = input.nextInt();    String[] Courses = new String[n];    int sumOfcreadit=0;    int sumOfmarks =0;    for(int i =0; i<Courses.length;i++){        System.out.print("Enter a course code: ");        Courses[i] = input.next();        if(checkCourse(Courses,Courses[i])){            System.out.println("the course already registered");            i--;        }        System.out.print("Enter a credit: ");        int credit = input.nextInt();        System.out.print(" Enter a marks: ");        int marks = input.nextInt();        sumOfcreadit += credit;        sumOfmarks +=marks * credit;    }     double TotalMarks;    TotalMarks = sumOfmarks /sumOfcreadit;    System.out.println("The GPA is: "+gradeValue(TotalMarks));}
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我对您的代码进行了一些更改,现在它工作正常。下面的代码中描述了更改。有3个重要的变化。我试图尽可能少地进行更改,以使代码按预期工作


public static boolean checkCourse(String[] courseList, String code) {

    boolean check = false;

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

        if (code.equals(courseList[i])) {  // equals instead of == to compare strings

            check = true;

            break; // you have to break loop if it is true because else statement before returned false even if there was the same course code due to null values in next array elements which was not filled yet

        }


    }

    return check;

}


public static double gradeValue(double marks) {

    double grade = 1.0;

    if (marks >= 95) {

        grade = 5.0;

    } else if (marks >= 90) {

        grade = 4.75;

    } else if (marks >= 85) {

        grade = 4.5;

    } else if (marks >= 80) {

        grade = 4.0;

    } else if (marks >= 75) {

        grade = 3.5;

    } else if (marks >= 70) {

        grade = 3.0;

    } else if (marks >= 65) {

        grade = 2.5;

    } else if (marks >= 60) {

        grade = 2;

    } else if (marks < 60) {

        grade = 1;

    }

    return grade;

}


public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.print("Enter number of courses: ");

    int n = input.nextInt();

    String[] Courses = new String[n];

    int sumOfcreadit = 0;

    int sumOfmarks = 0;


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

        System.out.print("Enter a course code: ");

        String code = input.next();

        if (checkCourse(Courses, code)){

            System.out.println("the course already regestered ");

            i--;

            continue; // continue is neccessary to let user write value again if it already exists

        }

        Courses[i] = code;

        System.out.print("Enter a credit: ");

        int credit = input.nextInt();

        System.out.print(" Enter a marks: ");

        int marks = input.nextInt();


        sumOfcreadit += credit;

        sumOfmarks += marks * credit;


    }

    double TotalMarks;

    TotalMarks = sumOfmarks / sumOfcreadit;


    System.out.println("The GPA is: " + gradeValue(TotalMarks));


}


查看完整回答
反对 回复 2022-09-28
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

使用一套结构来存储所有访问过的课程代码,这将避免对课程数组进行不必要的迭代


此方法可以增强为


public static boolean checkCourse(HashSet<String> courses, String code){

     boolean check = false;

     if(courses.contains(code)){

         check = true;

     else

         check = false;

     }

     return check;

}

初始化哈希集课程,如果 checkCourses 方法返回 false,请在课程中添加课程代码。


像这样在循环之前初始化


 HashSet<String> courseSet = new HashSet<String>();

您的 if 条件内循环


 if(checkCourse(courseSet,courses[i])){ // check for variable name , name should always start with lower case letter

    System.out.println("the course already regestered ");

    i--;

    // You can use continue if you don't want processing for it

    // it will skip the loop iteration and it will go next iteration

}else{

    courseSet.add(courses[i]);

}


查看完整回答
反对 回复 2022-09-28
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号