» »

Java

Java

Robocop1 ::

Pozdravljeni!

Sem nov na Javi in bi potreboval malce pomoči. Uporabljam Java Eclipse delovno okolje, moj problem pa je:
Ko napišem nek programček, na primer "Hello World", se mi program ne zažene
v konzoli (črno okence z belimi črkami) ampak v stranski vrstici, znotraj delovnega okolja (čisto spodaj, na robu okna). Tudi prevedene (EXE) datoteke nikjer ne najdem.

Zanima pa me, kje lahko nastavim, da se bo moj program zagnal v svojem oknu (v konzoli) in ne znotraj Javinega delovnega okolja? (če je to sploh mogoče)
Pa še eno vprašanje: Kje lahko najdem svojo prevedeno datoteko? A moram prej popravit kakšne nastavitve?

Invictus ::

Java ne pozna EXE datotek, ampak JAR datoteke. Ponavadi se nahaja v imeniku ime_projekta/dist. Le te lahko zaženeš tudi iz komandne vrstice:

java -jar ime_datoteke.jar

Kar se tiče Eclipsa (enako tudi Netbeans), on to zažene v svoji konzoli. Če bi rad svojo črnobelo konzolo (ali zeleno-črno), potem uporabi zgornji ukaz.

LP I.

Blinder ::

a si to na fri-ju, prvi letnik?
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

PaX_MaN ::

Zanima pa me, kje lahko nastavim, da se bo moj program zagnal v svojem oknu (v konzoli) in ne znotraj Javinega delovnega okolja? (če je to sploh mogoče)

Mislim, da se ne da. Bi rekel, da je to boljša ideja, zaradi lepše preglednosti - popup okna, ki forsirajo fokus so nadležna, že zato, ker jih moraš, če hočeš spet priti nazaj v IDE, (vsaj) zapreti.

Pa še eno vprašanje: Kje lahko najdem svojo prevedeno datoteko?

Desni klik na datoteko->Properties->na desni strani okna poglej "Location".

kayz1 ::

Eclipse ne ustvari jar-a privzeto tako kot netbeans.

Mavrik ::

Javine prevedene datoteke niso prav nobeni jar fajli (JAR fajl je v bistvu ZIP arhiv ki ima zraven še podano ime razreda, ki se požene), ampak so to .class filei, katere boš našel v /bin podmapi tvojega projeka.
The truth is rarely pure and never simple.

nn1234 ::

am lahko pa preprosto zaženeš program prek DOS okna..

Primer:
>javac ime_datoteke.java
>java ime_datoteke

sm prej pa pač sm pot napišeš do projekta kamor si ga shranu.

c0dehunter ::

sm prej pa pač sm pot napišeš do projekta kamor si ga shranu.


Ni potrebno; ustvariš novo datoteko (npr .txt), odpreš in vpišeš "cmd" (brez narekovajev) in shraniš s končnico .bat, npr zagon.bat.
Ta fajl skopiraš v mapo kjer maš .class al pa .java datoteke potem pa zaženeš in si že v delovnem direktoriju.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Mavrik ::

a desni klik, run as, java application res tako boli? ;)
The truth is rarely pure and never simple.

Blinder ::

al celo .bat datoteko da z dvoklikom zazenes javin program:D
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

infiniteLoop ::

Ce si sele zacetnik, se ti po moje ne splaca prevec sekirati zaradi poganjanja programa izven IDEja. Ko bos dejansko sprogramiral kaj uporabnega, pa lahko poskusis Launch4J ali kaj podobnega za pakiranje aplikacij, ce te bo se vedno mikalo poganjanje aplikacij s pomocjo .exe fajlov.
None of us is as dumb as all of us.

perooo123 ::

pozdravljeni, sem začetnik pri javi, in imam en problem, kakšna je koda ki ti namesto v konzolo prikazuje besedilo v prej narejeno okno v JTextArea?? delam pa u netbeansu.

hvala za pomoč!!

Zgodovina sprememb…

Nuke_H2 ::

perooo123 je izjavil:

pozdravljeni, sem začetnik pri javi, in imam en problem, kakšna je koda ki ti namesto v konzolo prikazuje besedilo v prej narejeno okno v JTextArea?? delam pa u netbeansu.

hvala za pomoč!!


Ja če maš že vse narejeno izgleda koda nekako tako:

Koda za izpis v konzolo:

public class IzpisKonzola{
  public static void main(String [] s){
       System.out.println("Besedilo, ki sem ga izpisal");
  }
}


Koda za izpis v JTextArea:

import javax.swing.*;
public class IzpisArea extends JFrame{
  public static void main(String []s){
      JPanel panel = new JPanel();
      JTextArea area =new JTextArea(20,20);
      panel.add(area);
      this.setContentPane(panel);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setSize(500,500);
      this.setVisible(true);

      area.append("Besedilo, ki ga izpišem v JTextAreo);
  }
}



Nekako tako. Kodo sem pisal na pamet zato je možno, da so kje manjše napake.


Lp Nuke_H2

mkos2 ::

Imam problem pri naslednji nalogi:
Andrej, Branko in Cvetka tarokirajo po poenostavljenih pravilih. Vsi pričnejo s po 0 točkami, nato pa igrajo partijo za partijo, dokler eden od njih ne preseže meje m točk (m je celo število, ki ga na začetku programa vnese uporabnik). Točke se posodobijo po vsaki odigrani partiji.
Napišite program, ki simulira potek tarokaške seanse. Vsako partijo simulirajte tako: o Najprej naj uporabnik vnese število 1, 2 ali 3, ki predstavlja nosilca igre. Število 1 pred-
stavlja Andreja, število 2 Branka in število 3 Cvetko. Nosilec igre je igralec, ki je izbral eno od možnih iger (tri, dve ali ena, gl. naslednjo točko) in jo bo poskušal dobiti. Točke bo pridobil ali izgubil le nosilec igre.
o Zatem naj uporabnik vnese število 3, 2 ali 1, ki predstavlja igro. Števila 3, 2 in 1 po vrsti predstavljajo igre tri, dve in ena.
o Zatem naj uporabnik vnese število 1 ali -1. Število 1 predstavlja nosilčevo zmago, število -1 pa nosilčev poraz.
o Zatem naj uporabnik vnese t.i. razliko. Razlika je celo število med 0 in vključno 35. o V naslednjem koraku naj program izpiše število točk, ki jih je pridobil oz. izgubil nosilec
igre. V primeru zmage nosilec pridobi (vrednost igre + razlika) točk, v primeru poraza pa isto število točk izgubi. Vrednost igre določa sledeča tabela:
Igra Vrednost tri 10 točk
dve 20 točk ena 30 točk
o Nazadnje naj program izpiše trenutno število točk za posamezne igralce. Če uporabnik na kateremkoli mestu vnese neveljavno vrednost, naj se simulacija takoj zaključi.
(Tukaj vam bo najbrž koristil stavek break.) Na koncu naj program izpiše število odigranih iger in število točk posameznih igralcev.
Sledi primer delovanja programa (uporabnikov vnos je podčrtan):
Zgornja meja stevila tock: 100
Nosilec (1, 2 ali 3): 1 Igra (3, 2 ali 1): 3 Zmaga/poraz (1 ali -1): 1 Razlika (med 0 in 35): 17
Andrej pridobi 27 tock. Trenutno stanje: Andrej 27, Branko 0, Cvetka 0
Nosilec (1, 2 ali 3): 3 Igra (3, 2 ali 1): 1 Zmaga/poraz (1 ali -1): -1 Razlika (med 0 in 35): 6
1



Tukaj je nekaj kode ki sem jo napisal:
import java.util.*;
public class Program3 {
	

	public static void main(String[]args){
	Scanner s = new Scanner(System.in);

	int igra,tocka2,tocka,tocka3,noszmaga;
	int age=s.nextInt();
	for(int i=100;i>=age;i++){
		
	}
	switch(age){
	case 1:
		int Andrej=1;
		System.out.println("Vnesi točko: ");//vnesi točko
		tocka=s.nextInt();
		System.out.println("Vnesi St iger: ");//vnesi št iger
		igra=s.nextInt();
		System.out.println("Vnesi 1 za zmago in -1 za poraz: ");//Vnesi zmago/poraz
		noszmaga=s.nextInt();
		if(noszmaga==1){//če je nosilec igre zmagal je dubi 1 T
			tocka++;
			System.out.println("Dubil si: "+tocka);
			if(noszmaga==-1){{//če je nosilec igre izgubil je dubil -1 T
				tocka--;
				System.out.println("Izgubil si: "+tocka);
			}
		}
		if(tocka==1||igra==1||tocka==2||igra==2||tocka==3||igra==3){//Uporabnik vnese ce je tocka =1,2,3 in ce je igra =1,2,3
			if(igra<=2||igra>=3){
				
			 System.out.println(igra +" igra "+ Andrej +" Andrej "+" stevilo tock "+tocka);
			}
		}
		break;
		}
	case 2:
		
		System.out.println("Vnesi točko: ");
		tocka2=s.nextInt();
		System.out.println("Vnesi St iger: ");
		int igra2=s.nextInt();
		int Branko=2;
		
		if(igra2==1||tocka2==1||igra2==2||tocka2==2||igra2==3||tocka2==3){
			if(tocka2==20){
				
			}
		System.out.println(igra2 +" igra "+ tocka2 +" tock ");
		}
		break;
	case 3:
		System.out.println("Vnesi točko: ");
		tocka3=s.nextInt();
		int igra3;
		System.out.println("Vnesi St iger: ");
		igra3=s.nextInt();
		int Cvetka=3;
		
		if(igra3==1||tocka3==1||igra3==2||tocka3==2|igra3==3||tocka3==3){
			System.out.println("Število iger:  "+ igra3 + " število tock "+ tocka3 );
			}
	    break;
		}
	
	System.out.println();
	       
			}
		

	}


ubupu sem čist.
Hvala za odgovore.

Zgodovina sprememb…

  • spremenil: mkos2 ()

Spura ::

Da bi kake funkcije napisal al pa kak razred pa ne bi slo?

Tr0n ::

Dubil si? :)

mkos2 ::

Hvala za odgovore, posvetoval sem se z profesorjem, dal mi je še eno šanso. Tako, da si bova vzela 1 solsko uro za programiranje programa. Vem težko je napisat, če ne razumeš logike programiranja.

IceBoX ::

Ali bi lahko kdo na hitro razložil stanje glede metod. Najprej se napiše recimo public static, potem če dobiš za rezultat int, napišeš int in nato ime metode? Kako pa je z argumenti, ki jih moraš napisati v oklepaju...kaj je mišljeno kot argumenti? Kar bom rabil za izračun ali kaj? Pa še to, ali je možno da ena metoda vrne več rezultatov in kako? Lepo bi prosil, če bi mi kdo malo razložil.

unit3d ::

Evo, primer metode, ki izračuna vsoto dveh celih števil in vrne celo število :)

public static int izracunajVsoto(int a,int b) {
int rezultat=a+b;
return rezultat;
}

v "mainu" pa potem kličeš to metodo in kot argumenta podaš 2 števili
int vsota=izracunajVsoto(5,5);

ref: http://download.oracle.com/javase/tutor... :)

Zgodovina sprememb…

  • spremenil: unit3d ()

IceBoX ::

Hvala za odgovor. Ali je mogoče, da v metodi dvakrat napišeš return ali gre samo enkrat?

c00L3r ::

IceBoX je izjavil:

Hvala za odgovor. Ali je mogoče, da v metodi dvakrat napišeš return ali gre samo enkrat?

Je možno večkrat napisat return. Ampak, izvedel pa se bo samo enkrat. In ko se "return" izvede, se tista metoda/funkcija zaključi.
Primer:
public boolean jeVecjeOdPet(int stevilo)
{
	if (stevilo > 5)
	{
		return true;
	} else
	{
		return false;
	}
}

IceBoX ::

Lahke primere razumem, pri težkih pa se mi enostavno ustavi. Moti me pa tudi izpis. V metodi se torej nekaj samo izračuna in nato se tista vrednost vrne. Nato pa ti tisto vrednost kličeš iz metode main? Kako pa je glede argumentov, ti si napisal int stevilo. Kaj za argumente se vedno napiše tisto kar bo metoda potrebovala?

Ericssony ::

Argumenti se določijo glede na to kaj bo metoda delala. Primer od c00L3r in unit3d ti to lepo prikaže.
Drugače pa: nauči se osnove objektnega programiranja!

IceBoX ::

Spet rabim vašo pomoč. Torej, imam program, ki naj bi urejal tabele po velikosti. Tabelo vnesem, se mi izpiše in nato se tabela sortira. Tukaj je koda.
public static void sortiraj(int[] a)
  {
    int i,j,iMin,vMin;
    for (i=0; i<=a.length-2; ++i)
    {
      iMin=i; vMin=a[i];
      for (j=i+1; j<=a.length-1; ++j)
        if (a[j]<vMin)
        {
          iMin=j; vMin=a[j];
        }
      a[iMin]=a[i]; a[i]=vMin;
    }
  }


A bi bil kdo tako prijazen in bi mi zraven vsake vrstice napisal kaj ta del kode dela? Pa še to, zakaj na začetku zanke gremo od začetka pa do dolžine tabele -2?

Imperfect ::

V 6. vrstici predpostaviš, da je trenuten element(i) zunanje zanke najmanjši.
S 7. se potem sprehodiš po vseh nadaljnjih elementih in z 8. preveriš če je kateri manjši. Če je, potem njegov indeks in vrednost zapišeš v 10.
V 12. potem samo še zamenjaš dejansko najmanjši element z i-tim elementom.

V obeh zankah mora bit -1 zato, ker uporabiš v for zankah manjše ali enako
(i<=a.length)
in ne samo manjše. Še dodaten -1 (torej -2) uporabiš zato, ker se znotraj zunanje zanke sprehodiš le do predzadnjega elementa - do zadnjega pa potem v notranji zanki.

revvs ::

Bo pa Janezek vse ročno, piko za piko napravil LOL. Očitno v Sloveniji ni zaostala samo ekonomija, to prehistorijsko programiranje ki ga učijo je še bolj smešno. Ta profesor jih nima vse čiste, ta navodila so težja kot pa programiranje. Za to rabiš 10 minut da prebereš, če ne zaspiš, ne da bi še rešil v 10 minutah. Jaz sem imel manj navodil v podjetju kjer sem izdelal program.

Spura ::

To je APS1 na FRI-VSS, kjer je asistent (ali kdorkoli ze sestavlja njihove naloge) govedo zarukano, k ne zna pol kurca objektno orientirano programirat.
Pazi tale biser:
public class Oseba implements Primerljiv{
	private static int atr=0;
	private static int smer=0;	//1 narascajoce(od manjsega naprej), -1 padajoce, 0 brez
	public int vrniAtr(){
		return atr;
}
	public void nastaviAtr(int a){
		atr = a;
	}
	public int vrniSmer(){
		return smer;
	}
	public void nastaviSmer(int s){
		if(s>0)
			smer = 1 ;
		else if(s<0)
			smer = -1;
		else smer = 0;	//ali smer=s;
	}
	public boolean manjsi(Primerljiv p){
		if(!(p instanceof Oseba))
			return false;
		
		Oseba o=(Oseba)p;
		
		switch(atr){
			case 1: return priimek.compareTo(o.priimek)*smer<0;		
			case 2: return ime.compareTo(o.ime)*smer<0;		//primerjamo niz
			case 3: return danR*smer < o.danR*smer;		//dan rojstva
			case 4: return mesecR*smer < o.mesecR*smer;		//primerjamo stevila
			case 5: return letoR*smer < o.letoR*smer;
			case 6: return (int)spol*smer < (int)o.spol * smer;
			case 7:	return naslov.compareTo(o.naslov)*smer<0;		//break ni potreben, ker imamo return
			case 8: return EMSO.compareTo(o.EMSO)*smer<0;
				default: return false;
		}
	}
	public String vrniVredAtr(){
		switch(atr){
			case 1: return priimek;
			case 2: return ime;
			case 3: return String.valueOf(danR);	//(new Integer(danR)).toString();
			case 4: return mesecR+"";		//return String.valueOf(mesecR);
											//return letoR+"";
			case 5: return (new Integer(letoR)).toString();		//case 3-5 razlicni nacini izpisov, vsi naredijo isto
			case 6: return (spol == 'M'? "moski" : "zenska");
			case 7: return naslov;
			case 8: return EMSO;
				default: return "";
		}
	}
	public boolean ustreza(String niz){
		return vrniVredAtr().startsWith(niz);
	}
}

Obup od obupa. A to nej bi bil OOP?

IceBoX ::

Pozdravljeni spet :). Zdaj me zanima kako napisati tale program.



Nisem se ga niti lotil, ker enostavno ne razumem kaj naloga hoče od mene. Tudi če ne napišete programa, prosim povejte mi vsaj kako naj se ga lotim, ker ga ne razumem.

Zgodovina sprememb…

  • zavaroval slike: bluefish ()

IceBoX ::

A mi res nobeden ne zna pomagati? Samo povejte kako naj se ga lotim

JCD ::

Z while zanko.

švrk ::

IceBoX je izjavil:

Pozdravljeni spet :). Zdaj me zanima kako napisati tale program.



Nisem se ga niti lotil, ker enostavno ne razumem kaj naloga hoče od mene. Tudi če ne napišete programa, prosim povejte mi vsaj kako naj se ga lotim, ker ga ne razumem.


Sm se malo poigral in nahitr napisal en šušmarski programček, ki tole računa. Preveri ker nisem čist ziher, da deluje pravilno.

public class vsota {

	public static double vsotax(double x){
		if(Math.abs(x)<1){
			int i=2;
			double vsota=0.0;
			double a=x;
			while(i<100000000){
				double delna=i*(i+1)*(i+2)*a;
				a=a*x;
				if(i%2==0 &&Math.abs(delna)>0.00001){
					vsota=vsota+delna;
					i++;
				}
				else if(i%2!=0 && Math.abs(delna)>0.00001){
					vsota=vsota-delna;
					i++;
				}
				else break;
			}
			return 1-vsota/6;
		}
		else return -1.000000001;	//vrne v primeru da abs(x)!<1
	}
	
	public static void main(String[] args) {
		double s=0.55;
		System.out.println(vsota.vsotax(s));
	}
}


Zagotovo pa se tole da na bolj eleganten način spisat. Mogoče s kakšno rekurzijo.

LP

DavidJ ::

IceBoX je izjavil:

A mi res nobeden ne zna pomagati? Samo povejte kako naj se ga lotim

Prvi člen je 2*3*4*x, drugi -3*4*5*x^2, tretji 4*5*6*x^2 itd. Očitno je, da lahko "trenutni" člen izračunaš iz prejšnjega. Torej drugega iz prvega, tako da prvega pomnožiš s (-1)*5/2*x, tretjega dobiš iz drugega, tako da ga pomnožiš s (-1)*6/3*x, četrtega iz tretjega, tako da ga pomnožiš z (-1)*7/4*x ...

Ko absolutna vrednost člena pade pod 10^(-5) končaš.
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')

Zgodovina sprememb…

  • spremenil: DavidJ ()

Spura ::


public class vsota {

	public static double vsotax(double x){
		if(Math.abs(x)<1){
			int i=2;
			double vsota=0.0;
			double a=x;
			while(i<100000000){
				double delna=i*(i+1)*(i+2)*a;
				a=a*x;
				if(i%2==0 &&Math.abs(delna)>0.00001){
					vsota=vsota+delna;
					i++;
				}
				else if(i%2!=0 && Math.abs(delna)>0.00001){
					vsota=vsota-delna;
					i++;
				}
				else break;
			}
			return 1-vsota/6;
		}
		else return -1.000000001;	//vrne v primeru da abs(x)!<1
	}
	
	public static void main(String[] args) {
		double s=0.55;
		System.out.println(vsota.vsotax(s));
	}
}


Zagotovo pa se tole da na bolj eleganten način spisat. Mogoče s kakšno rekurzijo.

LP

Pri rekurziji tvegas da ti gre stack v kurac, ker java nima tail call optimization.
si pa dost zakompliciral.

public static double vsota(double x) {
    if (Math.abs(x) >= 1) {
        throw new RuntimeException("x too large");
    }
    int i = 1;
    double vsota = 0.0;
    double clen = 1;
    int predznak = 1;
    while(Math.abs(clen) > 0.00001) {
        clen = Math.pow(x, i) * (i + 1) * (i + 2) * (i + 3) * predznak;
        vsota += clen;
        predznak *= -1;
        i++;
    }
    return 1 - vsota / 6;
}

Zgodovina sprememb…

  • spremenil: Spura ()

Spura ::

Krajsa, a bolj konfuzna koda (don't do this at home kids) :))
public static double vsota(double x) {
    if (Math.abs(x) >= 1) throw new RuntimeException("x too large");
    double vsota = 0.0;
    int predznak = 1;
    for(double i = 1.0, clen = 0;Math.abs(clen = Math.pow(x, i) * (i + 1) * (i + 2) * (i + 3) * predznak) > 0.00001;i++) {
        vsota += clen;
        predznak *= -1;
    }
    return 1 - vsota / 6;
}
This is fun.


Vredno ogleda ...

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

Java začetnik - pravilno število

Oddelek: Programiranje
71022 (745) roko granata
»

Java

Oddelek: Pomoč in nasveti
141358 (983) shadeX
»

[Java] Problem s Scanner-jem

Oddelek: Programiranje
92450 (2244) Zlatan
»

Java - dva problema

Oddelek: Programiranje
141721 (1329) nightrage
»

[Java] Kako filtrirati, katera števila lahko vpišeš?

Oddelek: Programiranje
182073 (1775) fiction

Več podobnih tem