Я ОЧЕНЬ новичок в программировании. Я пытаюсь написать программу, которая позволяет пользователям вводить стенограммы своих колледжей/университетов курс за курсом. Я хотел бы, чтобы каждый курс был разделен в своем массиве и разделен пробелами.
Например: 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();
}
}
Я думал, что могу создать объект студента, а затем иметь массив внутри этого объекта, который содержит курсы... И, может быть, когда я реализую графический интерфейс, у меня может быть кнопка «завершить»?
Другим предложением было бы использовать список объектов: List<Course> ... где Course — это класс с 4 атрибутами (например, ENG. 105, A и 3).
Чтобы достичь того, чего вы хотите, что-то вроде этого будет работать:
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() следует очистить буфер
Чтобы заставить это работать, мне нужно было добавить размер массива 4 в скобку рядом с длиной. Мне также пришлось добавить input.HasNextLine. Спасибо! :)
Есть 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-й введенный курс здесь).
@AddiFamer, попробуйте это, чтобы распечатать курсы: System.out.println("\nEntered Stuffs.!"); инт число = 0; for(String[] курсы:курсы){ System.out.println("Курс"+nbr++); for(String s:cours) System.out.print(s+" "); Система.out.println(); } (так поздно, но попробуйте, если вы не в курсе)
Похоже, здесь есть две проблемы. 1. вам нужно три массива. 2. вам нужен лучший способ ввода данных конечным пользователем. Я не уверен, в чем преимущество № 1. Хочешь
String[] courses
бытьString[][] courses
? Чтобы завершить пользовательский ввод, вы можете попросить пользователя ввестиdone
и проверить, есть ли эта строка для выхода из цикла.