Kolekcja z klasy

0

Czesc, probuje utworzyć Liste z "mojej" klasy w ktorej sa dwa typy danych (String i double) i nie potrafie dodac do mojej Listy po dwa elementy. Czy to co chcę zrobić jest możliwe ?? nie moge znalezc w internecie pomocy w tym temacie. Poniżej zamieszczam kod który do tej pory stworzyłem: Mam nadzieje ze mnie ktos zrozumie :]

import java.io.*;
import java.util.*;


public class Kolekcja {
	public static void main(String []args){
		List<Moja> moja = new ArrayList<Moja>();
		
		
		try {
			Scanner in = new Scanner(new File("Student.in"));
			while(in.hasNextLine()){
				String wejscie = in.nextLine();
				podzielString(wejscie);
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(moja);
		Moja(str,dbl);
		
	}

	private static void podzielString(String wejscie) {
		
		int point = wejscie.substring(0, wejscie.length()).indexOf(" ");
		String str = wejscie.substring(0, point+1);
		double dbl = Double.parseDouble(wejscie.substring(point+1, wejscie.length()));
//		Moja(str,dbl); //  tym przesłac dane do listy ?? 
	}
	public static String str;
	public static double dbl;
}
class Moja{
	public Moja(String pierwszy, double drugi){
		
	}
}

0

W twoim kodzie widzę lukę:

  • uaktywniasz konstruktor bez obiektu
    Wydaje mi się że Powinieneś zamiast
Moja(str,dbl);

to wpisać:

moja.add(str,dbl);

Tak właśnie oddajesz element do listy.

1

dziala ponizej zamieszczam kod :)


import java.io.*;
import java.util.*;


public class Kolekcja {
	public static void main(String []args){
		List<Kolekcja> moja = new ArrayList<Kolekcja>();
		
		
		try {
			Scanner in = new Scanner(new File("Student.in"));
			while(in.hasNextLine()){
				String wejscie =  in.nextLine();
				
				Kolekcja dane=podzielString(wejscie);
				moja.add(dane);
				System.out.println((moja));
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		System.out.println(moja);
		
		
	}

	private static Kolekcja podzielString(String wejscie) {
		
		int point = wejscie.substring(0, wejscie.length()).indexOf(" ");
		String str = wejscie.substring(0, point+1);
		double dbl = Double.parseDouble(wejscie.substring(point+1, wejscie.length()));
		Kolekcja m =new Kolekcja(str,dbl);
		return m;

	}
	private Kolekcja(String str2, double dbl2) {
		nazwisko= str2;
		ocena = dbl2;	
		
	}
	public String toString(){
		return nazwisko + ocena;
	}

	public static String str;
	public static double dbl;
	public static String nazwisko;
	public static double ocena;
	
}


}
0

widze ze nie dziala to do konca, poniewaz dane sa zle wyswietlane, jak powinna wygladac odpowiednia metoda toString??

plik Student.in :

JAN 5.0
KON 2.0
DOM 3.0
CYC 2.0
TOM 4.0
TY 3.0
0

nie ma tu kogos kto mi pomoze ??

0

System.out.println(dane); zamiast moja
Konkretnie to będzie tak:

 
public static void main(String[] args) {
		List<Kolekcja> moja = new ArrayList<Kolekcja>();
		try {
			Scanner in = new Scanner(new File("Student.in"));
			while (in.hasNextLine()) {
				String wejscie = in.nextLine();
				Kolekcja dane = podzielString(wejscie);
				moja.add(dane);
				System.out.println((dane));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println(moja);
	}

Da to wynik:
JAN 5.0
KON 2.0
DOM 3.0
CYC 2.0
TOM 4.0
TY 3.0
[TY 3.0, TY 3.0, TY 3.0, TY 3.0, TY 3.0, TY 3.0]

Może nie najlepszy, ale zbliżony do oczekiwanego. Metoda toString() jest dobrze. Jednak warto, aby zmienne nie były statyczne.

0

Pola nazwisko i ocena w klasie Kolekcja są static, mają zatem taką samą wartość dla wszystkich obiektów klasy Kolekcja. Usuń słowo static z deklaracji.

0

Kod jest lekkim WTFem. string.substring(0, string.length()) powienien zwrócić oryginalnego stringa, więc taka konstrukcja nic nie robi. Polecam użycie Scannera w metodzie podzielString - w konstruktorze Scannera możesz podać Stringa właśnie i z niego wczytywać.

0

dziekuje za pomoc i zainteresowanie:))

1 użytkowników online, w tym zalogowanych: 0, gości: 1