【问题标题】:How do you connect a single scanner to two arrays?如何将单个扫描仪连接到两个阵列?
【发布时间】:2022-01-16 23:37:39
【问题描述】:

基本上,我试图询问用户的输入,并且输入应该使用单个扫描仪存储在两个数组中。使用两个会询问用户两次,这是不切实际的。代码是这样的

int record = 0;
Scanner midOrFinal = new Scanner(System.in);
Scanner scansubjects = new Scanner(System.in);
Scanner scangrades = new Scanner(System.in);
    
System.out.println("Press 1 to Record for Midterm");
System.out.println("Press 2 to Record for Final Term");
record = midOrFinal.nextInt();
    
int midterm[] = new int[8];
int grades[] = new int[8];
    
{ 
  if ( record == 1 )
    System.out.println("Enter 8 subjects and their corresponding grades:");

  System.out.println();
    
  int i = 0;
    
  for( i = 0; i < 8; i++ )
  {   
    System.out.println(subjects[i]);                               
    System.out.print("Enter Grade: ");               
    grades[i] = scangrades.nextInt();            
    if( i == ( subjects.length) )
      System.out.println();
  }
  System.out.println("Enter Grade Successful");       
}

如果用户选择选项 1,用户将获得数组中的一些科目(我没有包括在内)并要求输入成绩。然后输入将继续到 midterm OR finalterm 数组,但我似乎无法通过使用一个扫描仪来做到这一点。

如果有比我提出的想法更好的想法,请分享。我还是 Java 新手,也是我第一次使用 stackoverflow。谢谢!

【问题讨论】:

  • 对 System.in 使用一个 Scanner。 更好的是,不要使用 Scanner,而是使用不易出错的 java.io.Console。但是,您必须从命令行(而不是 IDE 的“命令行”)运行,并自己进行 int 转换:Integer.parseInt(String)
  • 嗯,这是我第一次看到这些术语。我一定会检查这些。谢谢!

标签: java arrays java.util.scanner


【解决方案1】:
    class Main {

        public static final Scanner in = new Scanner(System.in);

        public static void main(String[] args) {
            in.useDelimiter("\r?\n");
            Student student = new Student();

            System.out.println("Press 1 to Record for Midterm");
            System.out.println("Press 2 to Record for Final Term");
            int record = in.nextInt();

            if (record == 1) {
                student.setTerm(TermType.MID);
                System.out.println("Enter 8 subjects and their corresponding grades:");
                System.out.println("Enter Subject and grades space separated.  Example -  \nMaths 79");
                System.out.println();


                for (int i = 0; i < 8; i++) {
                    System.out.println("Enter Subject " + (i + 1) + " details");
                    String subjectAndGrade = in.next();

                    int index = subjectAndGrade.lastIndexOf(" ");
                    String subject = subjectAndGrade.substring(0, index);
                    int grade = Integer.parseInt(subjectAndGrade.substring(index + 1));
                    student.getSubjects().add(new Subject(grade, subject));
                }
                System.out.println("Enter Grade Successful");

                System.out.println("========================================================");
                System.out.println("Details: ");

                System.out.println("Term Type " + student.getTerm());
                for(int i = 0; i< student.getSubjects().size(); i++) {
                    System.out.println("Subject: " + student.getSubjects().get(i).getSubjectName() + ", Grade: " + student.getSubjects().get(i).getGradeScore());
                }
            }
        }
    }

    class Student {
        private List<Subject> subjects = new ArrayList<>();
        private TermType term;

        public List<Subject> getSubjects() {
            return subjects;
        }

        public void setSubjects(List<Subject> subjects) {
            this.subjects = subjects;
        }

        public TermType getTerm() {
            return term;
        }

        public void setTerm(TermType term) {
            this.term = term;
        }
    }

    class Subject {
        private int gradeScore;
        private String subjectName;

        public Subject(int gradeScore, String subjectName) {
            this.gradeScore = gradeScore;
            this.subjectName = subjectName;
        }

        public double getGradeScore() {
            return gradeScore;
        }

        public void setGradeScore(int gradeScore) {
            this.gradeScore = gradeScore;
        }

        public String getSubjectName() {
            return subjectName;
        }

        public void setSubjectName(String subjectName) {
            this.subjectName = subjectName;
        }
    }

扫描器通过将输入分成一系列“标记”和“分隔符”来工作。开箱即用,“一个或多个空白字符”是分隔符。

【讨论】:

  • 我不太确定您要指出什么,因为我无法在 Eclipse 中运行代码。它也变得太复杂了。不过还是谢谢!我会努力学习你使用的方法。
  • 你应该将 Main 类命名为 public
【解决方案2】:

将成绩集合分解为一个新函数,并传递您要收集成绩的数组。

    public static void main(String[] args) throws IOException {

        int gradeType = 0;

        // Use a single scanner for all input
        Scanner aScanner = new Scanner(System.in);

        System.out.println("Press 1 to Record for Midterm");
        System.out.println("Press 2 to Record for Final Term");
        gradeType = aScanner.nextInt();

        String[] subjects = { "Subject A", "Subject B" };
        int[] midtermGrades = new int[subjects.length];
        int[] finalGrades = new int[subjects.length];

        int[] gradesToCollect;

        // Use gradesToCollect to reference the array you want to
        // collect into.
        //
        // Alternatively, we could call collectGrades() in both the if/else
        // condition
        if (gradeType == 1) {
            gradesToCollect = midtermGrades;
        } else {
            gradesToCollect = finalGrades;
        }

        collectGrades(subjects, gradesToCollect, aScanner);

        System.out.println("\n\nThese are the collected grades");
        System.out.println("Mid  Final");
        for (int i = 0; i < subjects.length; i++) {
            System.out.format("%3d  %3d\n", midtermGrades[i], finalGrades[i]);
        }
    }

    // Collect a grade for each subject into the given grades array.
    public static void collectGrades(final String[] subjects, final int[] grades, Scanner scn) {

        System.out.format("Enter %s subjects and their corresponding grades:",
                subjects.length);
        System.out.println();

        for (int i = 0; i < subjects.length; i++) {
            System.out.format("Enter Grade for %s : ", subjects[i]);
            grades[i] = scn.nextInt();
            if (i == (subjects.length))
                System.out.println();
        }
        System.out.println("Enter Grade Successful");
    }


【讨论】:

  • 哇。你实际上创造了我的想法。 “新”功能对我来说是第一次遇到,还有其他一些方法。我一定会检查这些。非常感谢您的宝贵时间!
猜你喜欢
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2023-03-24
  • 2016-06-20
  • 2018-10-29
  • 1970-01-01
相关资源
最近更新 更多