当前位置: 首页 > 知识库问答 >
问题:

如何将单个扫描仪连接到两个阵列?

苏鸿羽
2023-03-14

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

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,用户将得到数组中的一些主题(我没有包括),并要求输入分数。然后输入将进入期中或期末数组,但我似乎无法使用一台扫描仪。

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

共有2个答案

赫连越
2023-03-14

将等级收集分解为一个新函数,并传递要将等级收集到的数组。

    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");
    }


盖锦程
2023-03-14
    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;
        }
    }

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

 类似资料:
  • 我有一个链接到中。现在,在使用了

  • 问题内容: 今天早些时候,我问如何在不陷入无限循环的情况下重试/捕获输入不匹配异常 但是这是两个过程,首先,游戏会要求用户提供网格的大小,然后在启动后,游戏会要求用户设置标志或跨过一个单元格(如果我的游戏在其他单元格之上,会打印出周围的地雷数量),但是我收到一些奇怪的错误代码: 错误: 在我的打印语句之间打印异常消息的奇怪的事情(网格是一条语句,指令也是一条) 进行搜索时,我发现无法在同一位置使用

  • 我想读取一个文本文件,并将每一行放入一个字符串(字符串数组)。然而,这需要扫描文件两次,一次是为了找出有多少行,另一次是为了创建一个这样大小的字符串数组。但它抛出了一个错误,重置方法似乎不起作用。 这是相关的代码片段。

  • 我对的体验非常糟糕,因为我使用的是和。所以我不能做扫描仪的程序。我是新手,所以请帮助我,“找不到”。这是我到目前为止的代码。

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。

  • 我是java新手,我的任务是使用扫描器读取数组,并在另一种方法中读取int。 我正在做的是计算一只兔子到达河对岸所需的最小跳跃次数。数组中的int表示从河的一边开始的石头的距离,另一个int表示石头的数量。兔子能跳的最远距离是50。 对于输入和输出: 输入n:7(输入,河中的石头数)32 46 70 85 96 123 145(输入,石头与起点之间的距离,最后一个数字是河的宽度,即目的地(河对岸)