Хранение нескольких пользовательских входов в нескольких отдельных массивах

Я ОЧЕНЬ новичок в программировании. Я пытаюсь написать программу, которая позволяет пользователям вводить стенограммы своих колледжей/университетов курс за курсом. Я хотел бы, чтобы каждый курс был разделен в своем массиве и разделен пробелами.

Например: ENG 105 A 3 (массив 1) MAT 102 A 4 (массив 2) и т. д.

Кажется, что ввод хранится в одном массиве.

Было бы здорово, если бы мне не приходилось использовать счетчик, и программа могла бы двигаться дальше, когда пользователи закончат ввод своих курсов.

import java.util.Scanner;

public class Tester{

public static void main(String[] args) {

 int length;
 Scanner input = new Scanner(System.in);

 System.out.println("How many courses did you complete at your college / university?: ");
 length = input.nextInt();  

 String[] courses = new String[length];

 System.out.println("Follow this model when entering your courses: ENG 105 3 A");

 for(int counter = 0; counter < length; counter++){
  System.out.println("Course "+(counter+1));
  courses[counter] = input.next();   
 }

 input.close();

}

}

Похоже, здесь есть две проблемы. 1. вам нужно три массива. 2. вам нужен лучший способ ввода данных конечным пользователем. Я не уверен, в чем преимущество № 1. Хочешь String[] courses быть String[][] courses? Чтобы завершить пользовательский ввод, вы можете попросить пользователя ввести done и проверить, есть ли эта строка для выхода из цикла.

John Mercier 10.04.2019 21:10

Я думал, что могу создать объект студента, а затем иметь массив внутри этого объекта, который содержит курсы... И, может быть, когда я реализую графический интерфейс, у меня может быть кнопка «завершить»?

AddiFarmer 10.04.2019 21:34

Другим предложением было бы использовать список объектов: List<Course> ... где Course — это класс с 4 атрибутами (например, ENG. 105, A и 3).

Jaja 10.04.2019 23:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
226
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы достичь того, чего вы хотите, что-то вроде этого будет работать:

String[][] courses = new String[length][];

System.out.println("Follow this model when entering your courses: ENG 105 3 A");

for (int counter = 0; counter < length; counter++){
    System.out.println("Course "+(counter+1));
    courses[counter] = input.nextLine().split("\\s+");   
}

Поскольку это разбивает курс, он генерирует массив массивов, который выглядит следующим образом:

[["ENG","105","A","3"], ["MAT", "102", "A", "4"]] 

С другой стороны, если вы хотите остановить ввод, когда пользователь вводит ключевое слово, вам нужно что-то вроде этого:

List<String[]> courses = new ArrayList<String[]>;

System.out.println("Follow this model when entering your courses: ENG 105 3 A");
String course = input.next();
while (!course.equals("end")){
    courses.add(course.split("\\s+"));  
    String course = input.nextLine(); 
}

После input.next() следует очистить буфер

Jaja 10.04.2019 23:36

Чтобы заставить это работать, мне нужно было добавить размер массива 4 в скобку рядом с длиной. Мне также пришлось добавить input.HasNextLine. Спасибо! :)

AddiFarmer 11.04.2019 06:32
Ответ принят как подходящий

Есть 2 момента, которые нужно исправить: данные обработки (ENG-105-3-A) и буфер.

String[][] courses = new String[length][4];

System.out.println("Follow this model when entering your courses: ENG-105-3-A");

for(int counter = 0; counter < length; counter++){
    System.out.println("Course "+(counter+1));

    //Solution
    courses[counter] = input.next().split("-");  //data are separated by "-"

    input.nextLine(); //Cleanning buffer

}

Это работает. Я пытаюсь понять, как печатать отдельные курсы. Например, третий курс, который вы ввели, это (впечатайте 3-й введенный курс здесь).

AddiFarmer 11.04.2019 06:33

@AddiFamer, попробуйте это, чтобы распечатать курсы: System.out.println("\nEntered Stuffs.!"); инт число = 0; for(String[] курсы:курсы){ System.out.println("Курс"+nbr++); for(String s:cours) System.out.print(s+" "); Система.out.println(); } (так поздно, но попробуйте, если вы не в курсе)

Jaja 11.04.2019 19:20

Другие вопросы по теме