» »

Java Objekti

Java Objekti

fingaz ::

Pozdravljeni

Imam problem pri 3 tocki dane naloge :

Imamo razred Tocka, ki predstavlja točko v ravnini. Imamo tudi razred Razdalje, ki iz datoteke prebere podatke o točkah in v izhodno datoteko zapiše podatke o razdaljah. Pri tem vhodno datoteko lahko preberemo le enkrat. Predpostavite lahko, da so vsi podatki v datoteki zapisani v pravilni obliki, kot je določeno v nalogi.

1. Napiši razred Tocka z ustreznimi atributi, konstruktorjem, metodo toString() ter metodo razdalja(). Metoda toString() vrne niz, ki predstavlja zapis točke v obliki (x,y), kjer sta x in y koordinati te točke. Metoda razdalja() pa vrne razdaljo med točko in podano referenčno točko; pri tem razdaljo med točkama izračuna kot kvadratni koren vsote razlik posameznih koordinat: razdalja med (x1,y1) in (x2,y2) je sqrt( (x2-x1)2 + (y2-y1)2 ).
2. Napiši razred Razdalje, ki prebere podatke o točkah iz datoteke, poišče sredinsko točko ter zapiše podatke o razdaljah med točkami v izhodno datoteko. Zbirka, v kateri hranimo prebrane podatke o točkah, naj bo deklarirana v metodi main tega razreda. Za branje datoteke, iskanje sredinske točke in za zapis datoteke uporabi ustrezne metode, ki so opisane v nadaljevanju.
3. Napiši metodo preberiTocke(), ki iz datoteke tocke.txt prebere koordinate točk na ravnini in jih shrani v pomnilniku (za to uporabi ustrezno zbirko). V datoteki so podatki o vsaki točki zapisani v svoji vrstici, sestavljata pa jih dve celi števili (ločeni s presledkom), ki pomenita koordinati točke. Primer datoteke je prikazan spodaj.
4. Napiši metodo poisciSredino(), ki izmed vseh točk na ravnini poišči skrajno levo, desno, zgornjo in spodnjo točko ter z njihovo pomočjo izračunaj sredinsko točko. Sredinska točka ima koordinato x na sredi med skrajno levo in skrajno desno točko, njena koordinata y pa je na sredi med najbolj zgornjo in najbolj spodnjo točko. Metoda naj to sredinsko točko najprej izpiše na standardi izhod, nato pa jo tudi vrne.
5. Napiši metodo zapisiRazdalje(), ki v izhodno datoteko zapiše podatke o razdaljah med posameznimi točkami in sredinsko točko. Ime izhodne datoteke podamo kot prvi argument ob klicu programa. Izhodna datoteka naj ima v prvi vrstici zapisane koordinate sredinske točke (xs,ys), v naslednjih vrsticah pa so zapisane posamezne točke in poleg njih njihova razdalja do sredinske točke, zaokrožena na dve decimalni mesti. Primer izhodne datoteke je prikazan spodaj.


Vem da je treba nekak poklicat metodo razdalja iz razreda Tocka samo mi nikakor ne gre v glavo kako bi to naredu. Prosim za pomoc .. Hvala !

package Domace_NaLoge;

public  class  Tocka {
	private double x;
	private double y;
	
	
	public Tocka() {}
	
	
	public Tocka(double x,double y) {
		this.x=x;
		this.y=y;
	}
	
	//set
	public void setx(double x) {
		this.x=x;
	}
	public void sety(double y) {
		this.y=y;
	}
	
	//get
	public double getx() {
		return x;
	}
	public double gety() {
		return y;
	}
	
	public String toString() {
		return "("+x+" , "+y+")";
	}
	
	double razdalja(Tocka toc) {
		return Math.sqrt( Math.pow( (toc.x-x) , 2)  + Math.pow( (y-toc.y), 2));
		
	}
}


package Domace_NaLoge;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Razdalja {

	static Tocka tocka[] = new Tocka[4];
	static int i=0;
	public static void main(String[] args) {
		
		
		preberiTocke();
		poisciSredino();

	}
	public static void preberiTocke() {
		try {
			Scanner sc=new Scanner(new File("tocke.txt"));
		
			while(sc.hasNext()) {
				String vrstica=sc.nextLine();
				String tab[]=vrstica.split(" ");
				
				int x=Integer.parseInt(tab[0]);
				int y=Integer.parseInt(tab[1]);
				
				tocka[i]=new Tocka(x, y);	
				i++;
			}
		}catch(FileNotFoundException e) {
			System.err.println("FILE NOT FOUND");
			e.printStackTrace();
			
		}
	}
	public static Tocka poisciSredino() {
		
		for(int j=0;j<tocka.length;j++) {
			
			if(tocka[j].getx() < 0 && tocka[j].gety() > 0) {
				double xlevaZg=tocka[j].getx();
				double ylevaZg=tocka[j].gety();
				
	
				
			}
			if(tocka[j].getx() < 0 && tocka[j].gety() < 0) {
				double xlevaSp=tocka[j].getx();
				double ylevaSp=tocka[j].gety();
				
				
			}
			if(tocka[j].getx() > 0 && tocka[j].gety() > 0) {
				double xdesnaZg=tocka[j].getx();
				double ydesnaZg=tocka[j].gety();
				
			
			}
			if(tocka[j].getx() > 0 && tocka[j].gety() < 0) {
				double xdesnaSp=tocka[j].getx();
				double ydesnaSp=tocka[j].gety();
				
		
			}
				
			//tuki bi pol mogl dobit sredinsko tocko x in y pa ne stekam
			
		}
		
	}
}

fingaz ::

A lahko kdo odgovori k sm cist neucakan :D

phyro ::

ne razumem točno kaj sprašuješ... poklical bi rad neko metodo (v tvojem primeru double razdalja(Tocka toc)) ?
se pravi ce prav stekam mas ti neke tocke v tabeli, ce hoces recimo tocko na indeksu 0 primerjat s tocko na indeksu 4, to nardiš takole:
double razdalja04 = tocka[0].razdalja(tocka[4]);
pozabil sem kako je z dostopom do metode če ne napišeš nič ali je private ali public ^^

Spura ::

Defaultni je package access.

alexa-lol ::

nisem pogledal ampak... si ziher, da si pravilni inicializiru array s String tab[] . Kaj ni String[] tab ...

alexa-lol ::

evo sem ti malo predelal kodo...pri iskanju sredine si sploh kompliciral... zdaj dela kot mora
package sloTechDomacaNaloga;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Razdalja {
	static Tocka tocka[] = new Tocka[6];

	public static void main(String[] args) {
		preberiTocke();
		//poisciSredino();
		//printPoints();
                poisciSredino();

	}

	public static void printPoints(){
		for(int i = 0; i < tocka.length; i++){
                    System.out.println(tocka[i].toString());
		}
	}

	public static void preberiTocke() {
		try {
                    Scanner sc=new Scanner(new File("C:\\Input\\tocke.txt"));
                    int i = 0;

                    while(sc.hasNext()) {
			String vrstica=sc.nextLine();
			String tab[]=vrstica.split(" ");

			int x=Integer.parseInt(tab[0]);
			int y=Integer.parseInt(tab[1]);

			tocka[i]=new Tocka(x, y);
			i++;
                    }
		}
		catch(FileNotFoundException e) {
			System.err.println("FILE NOT FOUND");
			e.printStackTrace();
		}
	}

	public static void poisciSredino() {
		for(int j=0;j<tocka.length-1;j++) {
                    double midX = (tocka[j].getx()+tocka[j+1].getx()) / 2;
                    double midY = (tocka[j].gety()+tocka[j+1].gety()) / 2;
                    System.out.printf("Sredina tock %s in %s je (%.1f , %.1f)\n", tocka[j].toString(), tocka[j+1].toString(), midX, midY);
		}
	}
}


+ naucil sem se novega nacina inicializacije polj :D

fingaz ::

Hja res sem zakomplicirov :) Tko je prov :> Hvala !

Spura ::

alexa-lol je izjavil:

nisem pogledal ampak... si ziher, da si pravilni inicializiru array s String tab[] . Kaj ni String[] tab ...

To ni inicializacija, ampak je deklaracija. Oba nacina sta pravilna. Lahko tudi mesas. String[] tab[] je isto kot String[][] tab ali String tab[][].

alexa-lol ::

jap sem se zmotil...deklaracija je...
bom jaz zaradi same preglednosti ostal na T[]...[] blabla

frutabela ::

Pozdravljeni!
upam da je še kdo na tem forumu. Ker se moje vprašanje nanaša na to temo, ne bom odpirala posebej teme. Zanima me namreč, če tile getterji in setterji spadajo pod metodo to string ali pod katero drugo metodo? vem da se moje vprašanje marsikomu zdi butasto, ampak sem bol med novimi programerji v javi in mi kar dosti stvari ni povsem jasno!

Že vnaprej hvala za odgovore!

Lp

Mavrik ::

Katere getterje in setterje misliš točno (lahko prilepiš kako kodo da bo bolj razumljivo)?

Namreč v zgornjem primeru sta getx() in gety() metodi in seveda nista del toString(), ki je tudi metoda. Metode ne moreš dati znotraj druge metode. So pa vsi del razreda Tocka.
The truth is rarely pure and never simple.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Podatkovni tip

Oddelek: Programiranje
233563 (3215) piki12
»

[Java] Zasnova shoot em up igre

Oddelek: Programiranje
111120 (799) PecenkA
»

[C++] Metode

Oddelek: Programiranje
51457 (1289) failcoder
»

[JAVA] branje iz datoteke

Oddelek: Programiranje
242303 (1938) Bela01
»

[Java][Naloga] Skladi

Oddelek: Programiranje
51614 (1413) bijonda

Več podobnih tem