19. februar 2014 - 22:35Der er
36 kommentarer og 1 løsning
Udtage visse ord fra en String, og oprette objekter.
Hej Arne.
Aftenens sidste, men ret svære spørgsmål, så er jeg færdig med min aflevering (alle 22 opgaver, pyha).
Den her har jeg ingen idé om hvordan jeg skal gribe an. Kan du lede mig i den rigtige retning?
"Using the classes PhDStudent, TAStudent and Student, write a program that takes as command line argument a String like "TA1 TA3 ST3 TA4 PHD6". This command line has to be interpreted as: TA1 = teaching assistant 1, ST3 = regular student 3, PHD6 = PhD student 6, where the number indicates the position within an array of students, teaching assistants and PhD students. Your application must print out these objects (NOTE: you need to have some pre-stored objects before printing them out; since we cannot deal with files now, simply create some objects, store them into arrays, and then access them)."
Hmm, ok - nu er jeg kommet så langt, at jeg opdeler den String i 3 forskellige arrays i 3 forskellige klasser.
Men hvordan kalder jeg den så, fra mit program?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); Student.assignStudents(input); (Skulle kalde ovenstående metode i Student klassen) - Men mine metoder er jo ikke static - Og jeg arbejder jo egentlig ikke med objekter, når jeg bare har en String fra brugerinput, som skal opdeles i Arrays. Jeg er forvirret.
Arh - og derudover får jeg følgende exception: Exception in thread "main" java.lang.NullPointerException at student.Student.assignStudents(Student.java:186) at student.TestStudent.main(TestStudent.java:103)
linie 186 i Student: studentsArray[Integer.parseInt(one.substring(2, 3))] = one;
linje 103 i TestStudent: System.out.println(student1.assignStudents(input));
Det er vidst ved at være lidt for langt over min sengetid til at lære det her lige nu. :) Checker tilbage i morgen og håber på input fra dig, Arne.
for (String one : input.split(" ")) { if (input.startsWith("T")) { int v = Integer.parseInt(one.substring(1, 2)); taArray[v] = new TeachingAssistant(); } }
Irriterende man ikke kan slette sine indlæg som ikke er gennemtænkte. Hehe. Kan godt se det ikke er det samme du gør! Men forstår ikke helt, du opretter et objekt af en klasse (hvilken - den vi er i?, eller en anden?) -
Arne - Hvorfor kan jeg ikke (når nu jeg gemmer objekter af f.eks. typen Student i mit array) kalde mine Student metoder på de forskellige objekter i arrayet sådan her?:
Hvordan kalder jeg metoden (som ikke er static), uden et objekt? Skal jeg bare kalde den på et tilfældigt Student objektiv, som eksempelvis student1 (student1.assignStudents(input)[3]) ?
Og nr. 2.:
Hvorfor kan jeg ikke kalde mine Student metoder på det Student objektiv der ligger i arrayet på plads 3?
student1.assignStudents(input)[3].getName();
Når jeg prøver dette^ - Så giver den en nullpointer exception.
i for loopet, laver jeg objektet, ligesom du viste mig (Med det korrekte data som de forskellige parametre: studentsArray[v] = new Student("Navn", "Klasse", "Køn", int JavaProfeciency, int CprNummer);
problemet er, at jeg har lavet de forskellige arrays: taArray, phdArray og studentArray i de forskellige klasser - Så jeg kan ikke kalde den på den måde i min main.
Skal de forkellige arrays ikke være i de tilsvarende klasser?
private Student[] studentsArray = new Student[100];
public Student[] assignStudents(String input) { for (String one : input.split(" ")) { if (input.startsWith("ST")) { int v = Integer.parseInt(one.substring(1, 2)); studentsArray[v] = new Student("test", "test", "test", 1, 1); } } return studentsArray; }
Ok, så jeg kan godt se din pointe at den her ikke går: System.out.println(student1.assignStudents(input)[3].getName());
Men jeg er overbevist om, at jeg er rimelig gal på den, hvad angår hvor mit Students array skal være, og hvordan jeg i mit for loop kan smide Student objekter ind i et array der tilsyneladende er i en anden klasse.
Vil det sige at assignStudents metoden faktisk også skal være i main? Og så oprette forskellige objekter i forskellige arrays, alt efter hvilke bogstaver den String brugeren intaster indeholder?
Tror jeg nærmer mig noget der en dag kommer til at virke! Får nu følgende exception:
Exception in thread "main" java.lang.NumberFormatException: For input string: "A" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492) at java.lang.Integer.parseInt(Integer.java:527) at student.TestStudent.main(TestStudent.java:118)
Linje 118 er int v = Integer.parseInt(one.substring(1, 2)); under TA if'en.
--------
I min main har jeg nu følgende:
Student[] studentsArray = new Student[100]; Student[] phdsArray = new Student[100]; Student[] tasArray = new Student[100];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine();
for (String one : input.split(" ")) { if (input.startsWith("ST")) { int v = Integer.parseInt(one.substring(1, 2)); studentsArray[v] = new Student(one, one, one, 1, 1); } if (input.startsWith("PHD")) { int v = Integer.parseInt(one.substring(2, 3)); phdsArray[v] = new Student(one, one, one, 1, 1); } if (input.startsWith("TA")) { int v = Integer.parseInt(one.substring(1, 2)); tasArray[v] = new Student(one, one, one, 1, 1); } }
Hehe, den skal først afleveres inden kl. 12 formiddag i morgen, så jeg tror jeg klarer den. Det her er sidste opgave :)
Men. Nu får jeg ingen exception - Men den printer 3 arrays, fyld med NULL - Altså, den har ikke puttet objekterne ind i arraysne :(
?
Student[] studentsArray = new Student[100]; TAStudent[] tasArray = new TAStudent[100]; PhDStudent[] phdsArray = new PhDStudent[100];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine();
for (String one : input.split(" ")) { if (input.startsWith("ST")) { int v = Integer.parseInt(one.substring(2, 3)); studentsArray[v] = new Student(one, one, one, 1, 1); } if (input.startsWith("PHD")) { int v = Integer.parseInt(one.substring(3, 4)); phdsArray[v] = new PhDStudent(one, one, one, 1, 1); } if (input.startsWith("TA")) { int v = Integer.parseInt(one.substring(2, 3)); tasArray[v] = new TAStudent(one, one, one, 1, 1); } }
for (String one : input.split(" ")) { if (input.startsWith("ST")) { int v = Integer.parseInt(one.substring(2, 3)); studentsArray[v] = new Student(one, one, one, 1, 1); } if (input.startsWith("PHD")) { int v = Integer.parseInt(one.substring(3, 4)); phdsArray[v] = new PhDStudent(one, one, one, 1, 1); } if (input.startsWith("TA")) { int v = Integer.parseInt(one.substring(2, 3)); tasArray[v] = new TAStudent(one, one, one, 1, 1); } }
->
for (String one : input.split(" ")) { if (input.startsWith("ST")) { int v = Integer.parseInt(one.substring(2, 3)); studentsArray[v] = new Student(one, one, one, 1, 1); } else if (input.startsWith("PHD")) { int v = Integer.parseInt(one.substring(3, 4)); phdsArray[v] = new PhDStudent(one, one, one, 1, 1); } else if (input.startsWith("TA")) { int v = Integer.parseInt(one.substring(2, 3)); tasArray[v] = new TAStudent(one, one, one, 1, 1); } else { System.out.println("Can not parse : " + one); } }
Exception in thread "main" java.lang.NumberFormatException: For input string: "D" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492) at java.lang.Integer.parseInt(Integer.java:527) at student.TestStudent.main(TestStudent.java:116)
for (String one : input.split(" ")) { if (input.startsWith("ST")) { int v = Integer.parseInt(one.substring(2, 3)); studentsArray[v] = new Student(one, one, one, 1, 1); } else if (input.startsWith("PHD")) { int v = Integer.parseInt(one.substring(3, 4)); phdsArray[v] = new PhDStudent(one, one, one, 1, 1); } else if (input.startsWith("TA")) { int v = Integer.parseInt(one.substring(2, 3)); tasArray[v] = new TAStudent(one, one, one, 1, 1); } else { System.out.println("Can not parse : " + one); } }
AHh ja, selvfølgelig. Fordi, input starter jo altid med TA.
Ok, det ser faktisk ud som om det virker præcis som det skal. SKØNT!!
Vi fik lov til at bruge stackoverflow - Men det er nu alligevel nemmere og hyggeligere på dansk :)
Sov rigtig godt (Det kommer jeg i hvert fald til :))
Vi skrives nok herinde i fremtiden - Når nu mit android semester snart starter, hehehehe.
Igen, 1.000 tak for din hjælp! Jeg har lært virkelig meget i dag.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.