- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Az NVIDIA ipari AI-felhőt épít a németeknek, együtt az OpenAI és a Google
- Két új Ryzen közül választhatnak a kézikonzolok
Új hozzászólás Aktív témák
-
artiny
őstag
Tudnatok linkelni olyan feladatgyujtemenyt javabol, egyszerűbbeket (kozepiskolai szintu feladatokat) gyakorlas celjabol, aminel a megoldas is megtalalhato?
-
tick
aktív tag
válasz
WonderCSabo #7496 üzenetére
Működik! Nem teljesen értem hogyan, hiszen maga a selenium is tartalmazza és nincs egy importom sem, ami direktben a külön függő HtmlUnit-ot hívná. De működik, Köszönöm!
Egyébként azért fontos, mert a 2.15-ös HtmlUnit nem volt hajlandó behozni oldalakat ahol tíltva van az SSLv3. Egy módosítást találtam megoldásként, ami 2.16-ba került be. -
WonderCSabo
félisten
Én nem látok itt semmi átalakítást. Működik is nekem:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>seleniumtest</groupId>
<artifactId>seleniumtest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.45.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>Teszt osztály:
public class HtmlUnitTest {
@Test
public void testHtmlUnit() {
WebDriver driver = new HtmlUnitDriver();
driver.get("http://www.google.com");
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("htmlunit");
element.submit();
System.out.println("Page title is: " + driver.getTitle());
driver.quit();
}
}Mondjuk alapból 2.15-ös htmlunit-ot használ a legújabb Selenium, szóval nagy változásokra nem kell számítani a 2.16-s verziótól...
-
tick
aktív tag
Azt használom most, viszont macerás. Néha egyszerűen minden ok nélkül megáll vagy elhagyja a cookie-kat és emiat logoutol a webappból. Sőt 3-ből ~1-szer az első get nem is kap választ és timeout-ol. 3-ból 2-szer pedig egy másodpercen belül megvan. Nincs network probléma, a forrás konstans elérhető.
Windows esetén még könnyen mellékelem a jar-ba és kimásolom az azonos mappába futáskor, még a bináris beállítása előtt.
Linux esetén viszont ha nincs telepítve, akkor nem hajlandó futni. (Fedora alapú linuxnál pedig működésre sem tudtam bírni, de ez nem jelent problémát, mivel az egyetlen redhat-es emberke átmigrál)@WonderCSabo: Selenium átalakította, itt látszik is a rengeteg selenium import.
-
tick
aktív tag
válasz
WonderCSabo #7491 üzenetére
Próbáltam cserélni, de utána class not found errorokat kaptam sajnos
(a file nevet is cseréltem, és próbáltam újra importálni is) -
WonderCSabo
félisten
Ha rendes függőségkezelést használt (pl. Maven vagy Gradle), akkor egyszerűen csak deklarálni kell az újabb verziót és azt fogja használni. Ha az egybecsomagolt zipet használod, akkor ki kell dobni onnan kézzel a libs mappából a htmlunit jart, és berakni az újabbat.
-
tick
aktív tag
Selenium jar-ban vajon lehetne manuálisan frissíteni htmlunit-ot? Google nem siet a poodle reakcióval :/
-
norbert1998
nagyúr
válasz
WonderCSabo #7487 üzenetére
Igen, tudom, ezt copy paste-eltem egy nagyobb programból, amiatt a fura nevek. Az i-t én is ciklusváltozónak szoktam használni
-
Sk8erPeter
nagyúr
válasz
WonderCSabo #7487 üzenetére
Nekem az a "kedvencem", amikor valaki ilyen magasszintű nyelvben rövidítgeti a változóneveit, mintha nem lenne mindegy akár teljesítmény, akár az IDE autocomplete-je szempontjából, aztán lehet bogozgatni.
-
WonderCSabo
félisten
válasz
norbert1998 #7486 üzenetére
Csak egy apró tanács: ne nevezd el a tömb hosszút jelentő változót "i"-nek. Az "i"-t szinte mindig ciklusváltozónak szoktuk felhasználni.
-
D4nte
csendes tag
válasz
norbert1998 #7482 üzenetére
Az lenne a legjobb, ha magadtól rájönnél mi a hiba (ha az írás óta ez megtörtént az nagyszerű). Melléteszed a keresés Pszeudokódját segítségül esetleg (de ne görgesd le mert ott a java-s is!), és úgy már mindenképpen menni fog a javítás.
-
Szmeby
tag
válasz
norbert1998 #7482 üzenetére
A j egy nemnegatív szám. A k megy j+1-től j-ig, és növekszik. Csodálkozol, hogy nem csinál semmit?
-
norbert1998
nagyúr
Üdv újra!
Egy ABC rendezéssel szenvedek. Leegyszerűsítettem az egészet egy külön programba, elsősorban, hogy egy ilyen egyszerű esetben is csinálja-e, amit csinál. Sajnos igen. Az utolsó elemet berakja előre, és viszon'látás!
Minimumkiválasztásos rendezéssel ezt csinálja, közvetlen kiválasztásossal pedig az égvilágon lófült sem tesz. A minimumkiválasztásost írom le, most az van kicsinyítve nekem.
String csereseged;
String []rendnev={"A","B","C","D","E"};
int cser;
int i=rendnev.length;
for(int j=0;j<i-1;j++){
cser=0;
for (int k=j+1;k<j;k++){
if (rendnev[j].compareTo(rendnev[cser])>0) cser=k;
}
csereseged=rendnev[j];
rendnev[j]=rendnev[cser];
rendnev[cser]=csereseged;
}
for(int j=0;j<i;j++) System.out.println(rendnev[j]); -
floatr
veterán
Igaza van a többieknek a Writer osztályokkal kapcsolatban a doksi alapján, de:
public abstract class Writer implements Appendable, Closeable, Flushable {
...
abstract public void close() throws IOException;
...
}garancia nincsen rá h az implementációk meg is fogják csinálni.
public class FileWriter extends OutputStreamWriter {
...
}a FileWriter egy OutputStreamWriter "wrapper"
public class OutputStreamWriter extends Writer {
private final StreamEncoder se;
...
public void close() throws IOException {
se.close();
}
...
}namost a StreamEncoder nálam egy sun csomagos implementáció, a bytekód szerint úgy látom h meghív két flush jellegű metódust
void implClose() throws java.io.IOException;
0 aload_0 [this]
1 aconst_null
2 iconst_1
3 invokespecial sun.nio.cs.StreamEncoder.flushLeftoverChar(java.nio.CharBuffer, boolean) : void [64]
6 aload_0 [this]
7 getfield sun.nio.cs.StreamEncoder.encoder : java.nio.charset.CharsetEncoder [39]
10 aload_0 [this]
11 getfield sun.nio.cs.StreamEncoder.bb : java.nio.ByteBuffer [41]
14 invokevirtual java.nio.charset.CharsetEncoder.flush(java.nio.ByteBuffer) : java.nio.charset.CoderResult [71]tehát elvileg jó a cucc, ha a sort lezárod. Ennek ellenére én továbbra is aszondom, hogy ártani nem árt, ha használod a flush-t, ráadásul ha netán Writer helyett OutputStream-et használsz valahol, akkor megkíméled magad egy sunyi problémától.
-
WonderCSabo
félisten
Sorry, a Writer-t akartam írni, nem OutputStream-et. A Writer ősosztály azt mondja:
"Closes the stream, flushing it first. "
Ezt minden implementációnak be kell tartania. Az OutputStream és leszármazotta valóban nem állítanak ilyet magáról, ezért nem lehet hagyatkozni rá.
-
floatr
veterán
válasz
WonderCSabo #7476 üzenetére
public abstract class OutputStream implements Closeable, Flushable {
...
public void close() throws IOException {
}
...
}public
class FileOutputStream extends OutputStream
{
...
public void close() throws IOException {
synchronized (closeLock) {
if (closed) {
return;
}
closed = true;
}
if (channel != null) {
channel.close();
}
fd.closeAll(new Closeable() {
public void close() throws IOException {
close0();
}
});
}
...
}public
class FilterOutputStream extends OutputStream {
...
public void close() throws IOException {
try (OutputStream ostream = out) {
flush();
}
}
...
}A BufferedOutputStream az utóbbit terjeszti ki.
Ezért mondom azt, hogy kötelező a flush, mert van olyan implementáció, ami megcsinálja, van olyan, ami nem. Könnyű benézni. -
WonderCSabo
félisten
válasz
industrial #7474 üzenetére
Az, hogy a kódot "Programkód" formázással, vagy inkább direkt erre való PasteBin vagy GitHub Gists oldalakra rakd fel.
-
industrial
tag
Hello
Van egy java programom amiben a következőt kellene meg csinálnom:
Forrás txt fájlok beolvasása.
-Input bekérés conzolról, end jelig.
-Bevitt adatok elraktározása.
-Forrás tömbök összefésülése. (a két forrásnak azonos az első oszlopa, az alapján kell összerakni a 2-t)
-Tömb sorbarendezés.
-Kiírása txt fájlbaEddig jutottam a kódban de innentől nem igazán tudok haladni. Mi a további teenedő?
import java.util.Scanner;
import java.io.File;
import java.util.Vector;
public class Feladat {
Feladat() {
File enfileom = new File("adatok.txt");Vector<String> tomb = new Vector<String>();
//tombok a szetbontashoz
Vector<String> oszlop1 = new Vector<String>();
Vector<String> oszlop2 = new Vector<String>();//String[] tomb = new String[10];
try {
Scanner olvaso = new Scanner(enfileom);
while(olvaso.hasNextLine()){
tomb.add(olvaso.nextLine());
}
olvaso.close();
//tomb[0] = "slglsdf";
} catch (Exception ex) {
ex.printStackTrace();
}
//tomb kiirasa:
for (int i = 0; i<tomb.size(); i++){
System.out.println(tomb.get(i));
}int index;
for (int i = 0; i<tomb.size(); i++){
index = tomb.get(i).indexOf(",");
oszlop1.add(tomb.get(i).substring(0,index));
oszlop2.add(tomb.get(i).substring(index+1));
}Scanner bill = new Scanner(System.in);
String keresett;
do {
System.out.print("Mit keresel: "); -
Oppenheimer
nagyúr
válasz
PumpkinSeed #7470 üzenetére
"Valamiért nekem villog össze vissza"
Igen, az animáció akkor is be van kapcsolva és lassabb az animáció (50ms), mint ahogy húzogatod a csúszkát. Akkor is animál ha gépelsz, de annyira gyorsan kevesen írnak hogy azt ne tudja követni az animáció. Csúszkánál kiviszem majd.
Tudom, hogy nem igényes a design, de mint írtam a frontend teljesen újra lesz írva Angularban, így ezekkel már nem foglalkozok. Inkább olyan funkcionalitásbeli ötleteket vártam, mint social login, ismerőseid tevékenységeinek mutatása (megnézett, értékelt, listára rakott egy filmet) egy timelineon és hasonlók.
-
WonderCSabo
félisten
Számomra jónak tűnik a cucc, le is futtattam, létrehozza a fájlt és logol is bele. Két gondolatom van csak:
Settings.logging esetleg nem false?
FileWriter fw = new FileWriter(logFile.getName(),true);
Ezzel vigyázz, mert ez csak a current directoryban fogja létrehozni a fájlt a névvel, szóval nem ott lesz, ahol sejted. Pl. ha IDE-ből futtatod:
logFile útvonala a build mappában belül log.txt
new FileWriter(logFile.getName(),true) viszont az aktuális mappában, tehát a projekt mappában hozza létre a fájlt és írja
Szerk.: Közben már látom megtaláltad a jó megoldást, de akkor a posztom alapján már érted, hogy az előző miért nem ment.
-
PumpkinSeed
addikt
válasz
Oppenheimer #7469 üzenetére
A Movies alatt a Page Size állítása a Most kulcsszóra működik, de gondolom nem így tervezted. Valamiért nekem villog össze vissza, meg ilyenek.Elég furcsa, amúgy egy kis margin-t tehetnél. Most így hirtelen ennyi.
Szerk.: Ja meg ha a show details-re kattintunk akkor felmehetne a detail-sra, mert vártam, hogy majd ott lenyílik valami aztán jöttem rá, hogy feljebb kell menni hozzá.
-
Oppenheimer
nagyúr
Itt van a kis béna webapp ami miatt annyit kérdeztem mostanság.
Ha elmenne a netem, azért nem vállalok felelősséget.Frontend egy összegányolt single page app, sima html + jquery kombóval, azt majd újraírom angularral. A kinézetet ötévesek tervezték.
Regisztrációs felület még nincs, ezért csináltam a topiknak egy usert:
user: JavaHurkák
pwd: password3 hónappal ezelőtti IMDB adatbázisból dolgozik (akkor töltöttem le).
Elsősorban azért raktam be ide, hogy aki tud, az írhatna ötleteket új funkciókhoz.
-
tick
aktív tag
válasz
dabadab #7467 üzenetére
Nincs exception ez a bajom, már kigugliztam volna a megoldást
Megpróbáltam több féle módszert is amit google elém tárt, de egyszerűen egyik sem működik. És nem értem miért.Így működik!!
Köszi!
if(!logFile.exists()){
logFile.createNewFile();
}
FileWriter fw = new FileWriter(logFile, true);
fw.write(s.toString() + System.getProperty("line.separator"));
fw.close(); -
dabadab
titán
Ja, nem kellett volna ennyit bor a vacsorahoz
(Mondjuk jelen esetben a BufferedWriternek sok ertelme nincs, az akkor jonne jol, ha sok kis irasod lenne, ha egyszer irsz csak, akkor csak lassit.)
(Egyebkent a logFile-t mindenestul is atadhatod neki, fogad File-t is a FileWriter konstruktora.)Exceptiont sem dob?
-
tick
aktív tag
Üdv!
Egy saját "loggert" használok és console mellett fájlba is szeretném kiírni. A fájlt létrehozza sikeresen, de egyszerűen nem ír bele semmit. Mi lehet a gond?
public class Logger {
private static File logFile = new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()+"log.txt");
public static void log(Object s) {
if(!Settings.logging) return;
//console
System.out.println("L: "+s);
//file
try {
if(!logFile.exists()){
logFile.createNewFile();
}
FileWriter fw = new FileWriter(logFile.getName(),true);
BufferedWriter bw = new BufferedWriter(fw);
bw.newLine();
bw.write(s.toString());
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} -
norbert1998
nagyúr
válasz
WonderCSabo #7462 üzenetére
Értem. Köszi, hogy megnézted
-
WonderCSabo
félisten
válasz
norbert1998 #7442 üzenetére
Tudom, hogy csak a konzolra írtok, nem is baj az. Csak a formázást sztem nem kell túlzásba venni.
A keresést már nem néztem, mert az extra hiánya miatt ugye az egész kód piros volt. A beolvasás jó.
-
WonderCSabo
félisten
Megint szétoffoltuk a topikot srácok.
Kéne valami prog oktatás topik (vagy van?).
-
floatr
veterán
válasz
Aethelstone #7459 üzenetére
Szerintem az assembly tökre elfogadható. Láttál már forth kódot?
-
Aethelstone
addikt
Nyilván mindenkinek más fekszik. Ezért is nehéz eldönteni adandó alkalommal, hogy melyik nyelv lenne jó arra, hogy a teljesen zöldeket bevezesse a programozás világába. Ezért talán fontosabb az, hogy az a tanár, aki tanítja, milyen képességekkel rendelkezik, hogy elmagyarázza a népeknek. Mert aki zöld, annak olyan tökmind1, hogy melyik lesz az első programnyelv. (kivéve assembly
)
-
floatr
veterán
válasz
Oppenheimer #7454 üzenetére
Nem csak most, régebben is.
(#7455) Aethelstone én ezt ebben a sorrendben toltam: többféle basic, assembly (z80), pascal, c, assembly (x86), c++, java. Aztán a többi sallang. A C++ okozott sokaknak fejtörést, láttam ahogy vért izzadnak, pedig akkor a template-ek még sehol nem voltak. Egyszerűen elvesztek az absztrakcióban, és nem tudták készség szinten használni. Ahhoz képest a pointerek nélküli C gyerekjáték volt
-
dabadab
titán
válasz
Aethelstone #7456 üzenetére
Na de Javában MINDEN pointer
(Nálam a C az assembly után jött, én akkor azt nem értettem, hogy mit nem lehet nem érteni a pointereken)
-
dabadab
titán
válasz
Aethelstone #7451 üzenetére
"Szerintem kifejezetten könnyen tanulható a C++."
Höhö. (A Java se az, hogy ontopik maradjak.)
-
floatr
veterán
válasz
Aethelstone #7451 üzenetére
Uhh. A fősulin egy félévig gyúrták az évfolyam agyát C++-ra. A zemberek 90%-a meg sem értette, hogy mi ez az egész. Azok tudták követni, akiknek volt megfelelő előképzettsége (intézményesített/autodidakta)
-
floatr
veterán
válasz
Oppenheimer #7449 üzenetére
Ne mondd ezt. Én GTK alatt maszatoltam pythonnal, és elég gyorsan lehetett látható dolgokat csinálni. Ha valaki nagyon bele akar kapálni a dolgokba, úgyis utána megy.
Praktikussági alapon nekem a JS talán az, ami minden szempontból jó lehetne, bár nyilván mindenkinek más áll jobban kézre.
-
floatr
veterán
válasz
dabadab #7446 üzenetére
Ja, a python is elég jó kezdésnek. Vagy ruby
Amúgy pascalban is ott vannak a pointerek, de nem muszáj egyiknél sem használni, mint ahogy C-ben sem a malloc-cal kezd az ember.
(#7447) Oppenheimer kicsit feleslegesnek érzem az alacsony szintű dolgokat kezdésképpen. Egyből elmenne a kedve a kezdőnek mindentől. Kell valami, aminél kis ráfordítással látványos eredeményeket lehet elérni. Ezért is használták régen a BASIC-et assembly helyett
-
dabadab
titán
"Pascal-t és C-t elkezdeni elég könnyű"
A Pascalt igen. A C-t maximum ugy, hogy az ember a kod felet nem erti, mert ott pillanatok alatt megjelennek pointerek meg hasonlok.
Elso nyelvnek szerintem talan a Python a legalkalmasabb: valoban hasznalt, praktikus jelentoseggel is rendelkezik, lehet interaktiv interpreteres modban futtatni, tud egy csomo mindent, viszont azokat nem kotelezo hasznalni: egy egyszeru hello worldot egy sorban le lehet rendezni.
-
floatr
veterán
válasz
Aethelstone #7444 üzenetére
Teljesen mindegy milyen nyelvet választanak hozzá. Csak nem mindegy, hogy hogyan kezdik el. Pascal-t és C-t elkezdeni elég könnyű, a C++ és Java viszont kicsit nagyobb előkészületet igényel. Lehet h páran felhördülnek, de én akár JS-t is el tudnék képzelni első nyelvnek ilyen feladatokra. HTML-es babrálásokat már általánosban is tanulgatnak.
-
floatr
veterán
válasz
norbert1998 #7440 üzenetére
Mondjuk ezt az egészet én sem értem, hogy miért kell ezt így. Amikor gimis voltam az előző évezredben pascal-ban gyártottunk max 100 soros kódot, de ott már mindenféle algoritmus volt, amikell az alapokhoz. Jó hogy Javat használtok, de nem értem, hogy akkor először miért nem tanítják meg nektek azokat az alapokat, amivel nem csak gányoltok, hanem kezelhető minőségű kódot tudtok csinálni.
-
norbert1998
nagyúr
válasz
WonderCSabo #7441 üzenetére
És az extra hiánya miatt törölted az egész extra dolgot? Mondom pont abban látszik, hogy mi van.
És azt is mondtam, hogy csak konzolra iratunk. Az egész tanterven nincs is más!Neked működik az 1/2/1-es menüpontban a keresés és az első találat kiírása?
-
WonderCSabo
félisten
válasz
norbert1998 #7440 üzenetére
ha format left vagy right-tal kiiratod, akkor sincs elcsúszva a felső sor?
Nem. Mivel nem mellékelted azt a csomagot, ezért kénytelen voltam törölni az extra csomagban lévő hívásokat. De ezek szerint a kiírás rossz csak. Én nem sokat foglalkoznék egy konzolra való kiírás formázásával...
-
norbert1998
nagyúr
Szia!
Valójában 3-400 soros programot kellene írni. Az első része az volt, hogy alkossunk egy feladat specifikációt, ami alapján elkészül a program. Extra dolgokat tudhat, viszont kevesebbet nem. Nos, kicsit nagyon elvetettem a sulykot a feladatspecifikacional. Így most tulajdonképpen iszom a levét.Jézus, mennyit írtál!
köszönöm szépen
Sajnos ez nekem még mindig nagyon magasÉs tankonyvunk sincs. Semmit nem írt ki az oktatási minisztérium. Egy füzetbe jegyzetelunk és kész.
WonderCSabo: ha format left vagy right-tal kiiratod, akkor sincs elcsúszva a felső sor?
-
WonderCSabo
félisten
válasz
norbert1998 #7437 üzenetére
Lefuttattam a progidat, nálam oké, nem látok semmilyen extra karaktert.
-
Szmeby
tag
válasz
norbert1998 #7435 üzenetére
Szia!
Az ember maximum 7 dolgot tud egyszerre fejben tartani. A program komplexitása messze meghaladja ezt a számot. Vagyis az időd nagy részét arra pazarlod, hogy a fejedből kieső információt folyamatosan töltöd vissza, miközben ettől függetlenül hibát is keresel. Ne csodálkozz, ha nem megy. Senkinek sem menne.
Az oktatás célja új tudásanyag átadása, és nem a szívatás. Ha tömbök használatát kell gyakorolni, akkor gyakoroljátok, de ezt nem egy átláthatatlan programon kell csinálni, mert az már nem a tömbök használata lesz. Ezzel csak arra akarok célozni, hogy bizonyos komplexitás elérésekor meg KELL tanulni a kód kisebb egységekre bontásának módjait. Különben az energia egyre nagyobb részét fogja felemészteni az, hogy próbálod megérteni, mi történik, és egyre kevesebb figyelem jut a tényleges gyakorlásra.
A nehezebb mód az, hogy tovább görcsölsz rajta, és majd egyszer sikerül rátalálni az egyik hibára. Sajnos hátra van még a többi hiba is. Mindig van egy újabb hiba.
Ezen valamelyest javíthatsz, ha elkezded debugolni: teszel egy breakpoint-ot a problémás rész elé, és debug módban indítod a programot. Majd szépen lassan, soronként egyesével lépkedve, a változók értékeit folyamatosan ellenőrizve megnézed, mit is a csinál a gép.A könnyebb (és melósabb) mód, ha legalább megtanulsz metódust készíteni.
Első lépés:
public class Beadando {
public static void main(String[] args) {
new Beadando.doit();
}
// ez egy példány szintű metódus, nincs visszatérési értéke, nincs paramétere
public void doit() {
// a main helyett ide kerül minden
}
}A static main metódus a program belépési pontja, ugyan a Beadando osztályban van (mert valahova tenni kell), de nem sok köze van hozzá. Ami a main-ben történik, hogy az osztályból készül egy példány, és azonnal ráhívsz annak egy példány szintű (nem static) metódusára. Én doit-nek neveztem, te úgy nevezed, ahogy akarod. Minden más marad a régiben.
A következő lépés lehetne mondjuk a Beadando által gyakran használt változókat kiemelni, field-et csinálni belőle. Ha nem lenne egy Beadando példányod, ezt nem tehetnéd meg ilyen szépen. Pl. én kiemelném az adatot tartalmazó tömböket, sőt a színeket tartalmazó konstansokat is:
public class Beadando {
private static final String RESET = "\u001B[0m";
private static final String RED = "\u001B[31m";
private static final String BLUE = "\u001B[34m";
private static final String CYAN = "\u001B[36m";
private int n=500;
private String [] nev =new String [n];
private String [] gazdnev =new String [n];
private String [] tomeg =new String [n];
private String [] kor =new String [n];
public static void main(String[] args) {
new Beadando().doit();
}
public void doit() {
// ide kerül minden
}
}
Értelemszerűen ezeket már nem kell belül létrehoznod, elég hivatkozni rájuk. Javaban a konstans static és final módosítóval is rendelkezik, a példány szintű field-eknek nem kell static-nak lenniük. Nem is ajánlott.new Beadando()
Ez készít egy példányt az osztályból. Mivel az osztálynak még nincs látható(!) konstruktora, az alapértelmezett konstruktor (aminek nincs paramétere) használható a példányosításkor.A tömb mérete nem túl szép ott a field-ek között, lehetne akár konstruktor argumentum. A konstruktor tekinthető egy spéci metódusak is, máshogy is néz ki. Ő csak egyszer hajtódik végre, a példány létrehozásakor. A tömböket is elég ilyenkor lefoglalni:
public class Beadando {
private static final String RESET = "\u001B[0m";
private static final String RED = "\u001B[31m";
private static final String BLUE = "\u001B[34m";
private static final String CYAN = "\u001B[36m";
private String [] nev;
private String [] gazdnev;
private String [] tomeg;
private String [] kor;
private int n;
public static void main(String[] args) {
// new Beadando(500).doit();
// vagy akár így is lehet példányosítani és ráhívni az egyik metódusára:
Beadando beadando = new Beadando(500);
beadando.doit();
}
// ez a konstruktor, van egy int argumentuma, ebben lesz majd az 500
public Beadando(int n) {
this.nev =new String [n];
this.gazdnev =new String [n];
this.tomeg =new String [n];
this.kor =new String [n];
this.n = n; // ha esetleg még valahol hivatkoznál az n-re, a this.n-nel ezt megteheted
}
public void doit() {
// ide kerül minden
}
}A field-ekre a this. prefix-szel hivatkozhatsz, de elhagyható, ha a neve nem ütközik más változó nevével.
Első blikkre egész szépen kiszervezhetők metódusokba a case blokkokban lévő cuccok. Kezdd a belül lévő legkisebbekkel. Kommentekkel még el is nevezted őket, szinte adja magát.
Pl. ebből:
// ...
public void doit() {
// ... a doit elején lévő cuccok
case 3 : { //főmenü 1-es menüpont->2-es menüpont
String kereses=extra.Console.readLine("Milyen korút keressünk?");
db=0;
i=0;
while(kor[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(kor [g])){
torvalogatas[db]=g;
db++;
}
}
break;
}
// ... a doit végén lévő cuccok
}
}Ez lesz:
// ...
public void doit() {
// ... a doit elején lévő cuccok
case 3 : { //főmenü 1-es menüpont->2-es menüpont
db = keresKorra(torvalogatas);
break;
}
// ... a doit végén lévő cuccok
}
// ez egy új metódus, az osztályon belül, de a doit metóduson kívül
private int keresKorra(int[] torvalogatas)
String kereses=extra.Console.readLine("Milyen korút keressünk?");
int db=0; // Figyelem! Ez a db, nem a metóduson kívül található db.
int i=0; // Ahogy ennek az i-nek sincs semmi köze a külső i-hez. Ezek csak itt belül léteznek.
while(kor[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(kor [g])){
torvalogatas[db]=g;
db++;
}
}
return db; // Itt a metódus futása megszakad és visszatér a return mögött található változó értékével.
}
}A metódusokat tetszőleges sorba rendezheted, azokat, amelyek hasonló dolgot csinálnak, egységesítheted. Amelyek pedig ugyanazt csinálják, több helyen újra felhasználhatod, eltérő paramétereket adva neki.
private int keresKorra(int[] torvalogatas)
Az első elem egy láthatóságot szabályozó módosító, a private csak az osztályon belül látható, a public bárhol, a többi most nem érdekes, jelen esetben teljesen mindegy, melyiket használod.
A következő a metódus visszatérési értékének típusa. Sajnos max. csak 1 db visszatérési értéke lehet egy metódusnak, ez most egy int (a metódus törzsében található return utasítással adod majd vissza a tényleges értéket). Ha a metódus nem kell, hogy visszaadjon értéket, akkor a típus a void lesz (a return pedig elhagyható).
Aztán jön a metódus neve, tetszőleges, bár a szokásos névkonvenciók rá is vonatkoznak, kezdődjön kisbetűvel, és az ékezetes betűket inkább hanyagold.
A zárójelek között pedig vesszővel elválasztva felsorolod a metódus paramétereit (típusa és a metóduson belül használt neve).
Ha a metódusban kivételt is dobunk és azt nem kapjuk el, akkor a ) után szerepel a throws kulcsszó és a kivételek vesszővel elválasztva, pl.: void metodusNeve(String param1, int param2) throws IOException { }. A fordító majd úgyis reklamál, ha ilyet kell csinálnod.A return a metódusban bárhova tehető, de ha a vezérlés elér hozzá, - akár egy ciklus kellős közepén is vagy - a metódus futása megszakad és visszatér az adott változó aktuális értékével. Ez alól csak a finally blokk kivétel, mert az abban lévő cucc a metódus elhagyása előtt még gyorsan megfut.
A metódus felhívása így történik:
db = keresKorra(torvalogatas);
Metódus neve, és zárójelben vesszővel elválasztva felsorolod az átadni kívánt paramétereket. Ha a metódus valamilyen értékkel is visszatér (nem void), akkor azt az értéket el is tárolhatod egy változóban, most a db változóba tettük egy sima értékadás keretében. Persze ha kint nincs szükséged a visszaadott értékre, nem kell azt mindenáron változóba tenni, az értékadás elhagyható.A metódus törzse egy külön világ, itt csak a field-eket és a beadott paramétereket látod, ezekkel dolgozhatsz.
A paraméterek érték szerint adódnak át. Ez primitív típusoknál (int, char, boolean, stb.) egyértelmű, az érték átadásra kerül, de a metódusban bármit is csinálsz vele, az a metóduson kívül nem fog érvényre jutni. Immutable típusoknál (pl. String) sincs veszély, mert azok úgy lettek megalkotva, hogy bármit is csinálsz vele, magán az objektum állapotán nem változtat, inkább új objektumot hoz létre.
Viszont van minden más (pl. a fentebb említett Dog osztály, vagy éppen a tömbök), amelyek akár több értéket is képviselhetnek. Ezért aztán csak azok memóriacíme kerül értékként átadásra, így ha ezek tartalmát módosítod a metóduson belül, a módosításod a metóduson kívül is érvényre jut. Hiszen a metóduson kívül létező tömb és a metódusnak átadott tömb címe ugyanaz, ugyanazt a memóriaterületet piszkálod.
És itt jutottunk el ahhoz a csúnya megoldáshoz, amit alkalmaztam: átadtam a torvalogatas tömböt a metódusnak, pedig az csak ír bele. Nem szép dolog metóduson belül a paramétereket változtatni, normális esetben csak olvasni szabadna, de ez például egy módszer arra, hogy a metódus több dolgot is változtasson (mivel csak egy visszatérési értéke lehet, és azt a db-re elpazaroltuk).
Persze a több visszatérési értékre van más megoldás is, pl. minden visszaadandó cuccot becsomagolni egy objektumba, de egyelőre szerintem ennyi is elég.Kellemes refaktorálást. Miközben bontod szét a kódot, valószínűleg a mostani hiba okát is meg fogod találni. Ha lehet, említsd meg a tanárnak, hogy az ezersoros programod kezd átláthatatlanná válni, meséljen már az osztályokról, példányokról és metódusokról.
Ami pedig az érettségit illeti: Egy problémát meg lehet oldani jól és hatékonyan, de meg lehet oldani gányolással is. Nem kell ismerni az osztályokat, a metódusokat, de még a for ciklust sem hozzá. Csak éppen évekkel tovább tart a megoldás, és lehet hogy kapsz rá egy kettest. És egy bizonyos méret felett az ember már nem a megoldással foglalkozik, hanem a kapálózással, hogy a víz felszínén tudjon maradni. Kizárt, hogy érettségin ne kelljen ezeket az alap dolgokat használni. De tedd fel magadnak a kérdést: Könnyű érettségit akarsz? Jó munkahelyet magas fizuval? Ha igen, és a tömböket már unalomig gyakoroltad, akkor érdemes továbblépni a List-re. Annyi hasznos dolog van még a nyelvben, sose jutsz a végére.
Bár lehet, hogy feleslegesen pötyögtem... csapd fel a tankönyvet a metódusnál és hajrá.
Persze a legjobb az lenne, ha az osztályok és metódusok után egy elegáns mozdulattal telepítené mindenki a junit-ot, és TDD-ben gyakorolnátok tovább. Mennyivel könnyebb lenne az immáron jól struktúrált kódon megtalálni a hibákat. És a refaktorálás is veszélytelenebb lenne. Szép álom.
-
norbert1998
nagyúr
válasz
WonderCSabo #7436 üzenetére
[link]
A mappában az adatok txt lesz az. Küldöm az egészet, hátha mész valamira. Úgyis csak 32 KB. -
WonderCSabo
félisten
válasz
norbert1998 #7435 üzenetére
Töltsd fel a forrásfájlt valahova, változatlanul.
-
norbert1998
nagyúr
válasz
WonderCSabo #7434 üzenetére
Jaa, értem. Ezt nem vettük még. Egyszer mintha szórakoztam volna egy-két osztály létrehozásával, de kb. ennyi is volt.
Arra lehet tipped, hogy miért van egy plusz, nem látható karakter az első beolvasott elem mögött? (A forrásban nincs szóköz)
-
WonderCSabo
félisten
válasz
norbert1998 #7432 üzenetére
Metódus-t meg nem lehet máshogy hívni Javában:
pulic class Main {
public static void main(String[] args) { // a main egy metódus
}
public String masikMetodus() { // masikMetodus egy másik metódus
return null;
}
} -
WonderCSabo
félisten
válasz
norbert1998 #7432 üzenetére
A Collections-re gondolom csoportok alatt, és az nem primitív tömb, amit Te használsz, hanem modern adatszerkezetek (tárolók) gyűjteménye. A kettő nem egyelő, nem mondjuk a tömböt Collection-nek, mert nem az. PL.
Tömb:
int[] tomb = new tomb[1000]; // lefoglalok előre sokat
tomb[0] = 1;
int a = tomb[i]; // benne volt-e? mire vizsgáljak?
i > 1000 // le kell foglalni új tömböt, mert már nem férne bele az elemekCollections:
List<Integer> lista = new ArrayList<>();
lista.add(2);
lista.add(3);
lista.remove(2);// dinamikusan változik a mérete, "sosem" telik be, kivenni is lehet elemeket, a benne lévő elemek ismertek
Ez csak egy típusó Collection, van még nagyon sok.
-
norbert1998
nagyúr
válasz
WonderCSabo #7431 üzenetére
Lehet, hogy igen(bár nem hiszem, sőt), de ti a tömböket is csoportoknak meg nem tudom még minek hívtátok, amit akár mondhatnátok estig is, akkor sem érteném meg, hogy az ott egy tömböt jelentene, mert mi mindig csak tömbnek hívtuk.
-
WonderCSabo
félisten
válasz
norbert1998 #7428 üzenetére
Új metódusok írását se tanultátok?
Szerk: Ezek szerint nem... Mondd meg a tanárnak, hogy ilyen komplex feladat (már ha az tényleg) megoldásához biztosítsa a megfelelő eszköztárat.
-
norbert1998
nagyúr
válasz
norbert1998 #7428 üzenetére
Közelebb kerültem ismét a megoldáshoz. Mégis a beolvasással lehet valami. A legelső beolvasott tömbelem (azaz a példában az első sor Bukfenc-e) egy nem látható karakterrel rövidebb, mint a többi tömb elem(e).
A szöveg BOM nélküli UTF-8-ba van formázva, txt fájl, és ahogy fent látható, szóközök nélkül pontosvesszők választják el őket.
gygabor88: És az mi és hogy?
-
skoda12
aktív tag
válasz
norbert1998 #7428 üzenetére
Azért metódusokra szétszedheted. Nem lesz rövidebb, de így legalább kisebb-nagyobb kód blokkokat el tudsz nevezni és akkor már érthetőbb lesz a kód.
-
Oppenheimer
nagyúr
Sziasztok, egy jó kis SO kérdéssel jönnék. Ha valami nem világos a kérdésemben, vagy több információ kell, akkor rendelkezésre állok.
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7421 üzenetére
Értelmesebb lett volna, ha egyből egy tesztelhető kódot dobsz be (értsd: mi csak bedobjuk a fejlesztőkörnyezetbe az adott osztály(oka)t, és mehet a teszt), vagy csak a vonatkozó kódrészletet, nem csak simán bedobod ezt az óriási - ráadásul rosszul tagolt - borzalmat (mert lusták vagyunk kibogarászni ekkora kódot, ami ronda is, gyorsabb lenne lefuttatni). Ekkora mennyiségű kód tényleg mehetne pastebinre (ahol bekattintod, hogy Java-szintaxis szerint legyen kiemelve értelemszerűen). Amúgy nem véletlenül mondtuk korábban, hogy bontsd szét a kódodat több metódusra, ez így valami elképesztő ocsmány és átláthatatlan.
(#7423):
Ugyanúgy megoldhatod do-while-lal ezt a feladatot is. -
Ursache
senior tag
válasz
norbert1998 #7421 üzenetére
Legkozelebb pastebint, vagy hasonlot hasznalj, koszi.
-
KAMELOT
titán
válasz
PumpkinSeed #7407 üzenetére
Köszi szépen!
-
norbert1998
nagyúr
válasz
PumpkinSeed #7422 üzenetére
Értem, köszi
Most megint lehet én vagyok hülye, de egyszerűen nem jut eszembe, hogy lehetne megoldani.
Adott egy pár elemes tömb, ami egész számokat tartalmaz. Kéne egy ciklus, ami megnézi, hogy a bevitt int-et (pl. 5-öt) tartalmazza-e a tömb. Ha nem tartalmazza, akkor írja ki, hogy ... és kérje be újra a változót, amíg nem lesz egyenlő a tömb valamelyik elemével. -
PumpkinSeed
addikt
válasz
norbert1998 #7419 üzenetére
Megkerestem a kerettanterveket. Ahogy írtad szakos osztály vagytok, szóval a szakközépiskolai kerettanterveket töltöttem le. Ahogy leszűrtem te most 10-es lehetsz (2 év múlva érettségin miatt). Szóval a 10-es tantervet néztem ami két ágazatra szakosodott. Az egyik a programozó másik hálózatos, ahogy én értelmeztem. A programozói szakágon van az algoritmusok és adatszerkezetek valamilyen algoritmusleíró nyelven míg a másikon ugyan ezen a helyen a hálózati kommunikációk. Szóval nem nagyon van meghatározva. Amúgy annak idején 10-ben nekünk C++-t tanítottak, szóval elég régóta van már ez a rendszer. A lényeg az, hogy érettségin a kód működését illetve a felépítését ellenőrzik okos emberek, ugyanis emelt érettségit jobb esetben kijelölt iskolában végzed ahol hozzáértő emberek ellenőrzik. Ha korszerűbben oldod meg mint ahogy amúgy tanultad nem fognak megbuktatni.
-
norbert1998
nagyúr
válasz
Sk8erPeter #7420 üzenetére
Én nem ismerem, a tanárOK mondják, hogy rémes a kerettanterv
Szóval, annyit javult a helyzet, hogy most ha a gazda neve, kor vagy tömeg alapján keresek, akkor tökéletes, viszont ha név alapján, akkor a név tömb első elemét valamiért ignorálja. Az egész beolvasás procedúra tulajdonképpen ugyanaz az összes tömbnél, továbbá ha csak szimplán kiiratom azt a tömbelemet, akkor ott van rendesen, hogy Füsti (vagy akármi, amit beviszek arra az elemre), de a kereséskor nem találja.
Itt a kód(try catch-ben van, de azt most nem keresem meg, hol a vége-eleje, de nincs azzal gond)
Így azt hiszem, egy az egyben be is másolhatváltozók megadásával) futtatható is//változók
int fomenu, kilepes=0;
int bevitel,torles,rendezes,szures,mentes,elvet,kilep;
int bevkeres,torkeres, szurkor,szurtt;
int mod;
//beolvasas
BufferedReader br=new BufferedReader(new FileReader("adatok.txt"));
String sor;
int n=500;
String [] nev =new String [n];
String [] gazdnev =new String [n];
String [] tomeg =new String [n];
String [] kor =new String [n];
int olvastomb=0;
while((sor=br.readLine())!=null){
nev[olvastomb]=(sor.substring(0, sor.indexOf(";")));
sor=sor.substring(sor.indexOf(";")+1);
gazdnev[olvastomb]=(sor.substring(0,sor.indexOf(";")));
sor=sor.substring(sor.indexOf(";")+1);
tomeg[olvastomb]=(sor.substring(0, sor.indexOf(";")));
sor=sor.substring(sor.indexOf(";")+1);
kor[olvastomb]=sor;
olvastomb++;
}
//problémás részlet
try{
int []modvalogatas=new int[n];
int db=-1;
int i=0;
do{
i=0;
System.out.println(BLUE+"MEGLÉVŐ ÁLLAT ADATAINAK MÓDOSÍTÁSA MENÜ"+RESET);
System.out.println("Mi alapján szeretnénk kiválasztani a módosítandó tulajdonságú állatot?");
System.out.println("1-Név alapján");
System.out.println("2-Gazdája neve alapján");
System.out.println("3-Kor alapján");
System.out.println("4-Testtömege alapján");
System.out.println("5-Mégsem");
System.out.println();
bevkeres=extra.Console.readInt("Melyik menüpontot választja? ");
switch(bevkeres){
case 1 : {
String kereses=extra.Console.readLine("Milyen nevet keressünk?");
db=0;
i=0;
while(nev[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(nev [g])){
modvalogatas[db]=g;
db++;
}
}
break;
}
case 2 : {//főmenü 1-es menüpont->2-es menüpont
String kereses=extra.Console.readLine("Mi a gazda neve?");
db=0;
i=0;
while(gazdnev[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(gazdnev[g])){
modvalogatas[db]=g;
db++;
}
}
break;
}
case 3 : { //főmenü 1-es menüpont->2-es menüpont
String kereses=extra.Console.readLine("Milyen korút keressünk?");
db=0;
i=0;
while(kor[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(kor [g])){
modvalogatas[db]=g;
db++;
}
}
break;
}
case 4 : {//főmenü 1-es menüpont->2-es menüpont
String kereses=extra.Console.readLine("Milyen tömegűt keressünk?");
db=0;
i=0;
while(tomeg[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(tomeg [g])){
modvalogatas[db]=g;
db++;
}
}
break;
}
case 5: { //főmenü 1-es menüpont->2-es menüpont
break;
}
default: { //főmenü 1-es menüpont->2-es menüpont
System.out.println(RED+"Hibás értéket adott meg."+RESET);
}
}
try{ //főmenü 1-es menüpont->2-es menüpont
if(db!=0){
System.out.println(nev[0]+gazdnev[0]+tomeg[0]+kor[0]);
System.out.println("Az alábbi találat(ok) keletkeztek. ");
for (int j=0;j<db;j++){
System.out.println((modvalogatas[j])+"-"+nev[modvalogatas[j]]+";"+gazdnev[modvalogatas[j]]+";"+kor[modvalogatas[j]]+"év;"+tomeg[modvalogatas[j]]);
}
int modos=extra.Console.readInt("Melyik állatot kívánja módosítani a fentiek közül?");
do{
System.out.println(BLUE+"ÁLLAT ADATÁNAK MÓDOSÍTÁSA MENÜ"+RESET);
System.out.println("1-Név módosítása");
System.out.println("2-Gazda nevének módosítása");
System.out.println("3-Testtömeg módosítása");
System.out.println("4-Kor módosítása");
System.out.println("5-Mégsem");
System.out.println();
mod=extra.Console.readInt("Melyik menüpontot választja?");
switch (mod){
case 1:{ //főmenü 1-es menüpont->2-es menüpont
nev[modos]=extra.Console.readLine("Mi az állat új neve?");
break;
}
case 2:{ //főmenü 1-es menüpont->2-es menüpont
gazdnev[modos]=extra.Console.readLine("Mi az új gazda neve?");
break;
}
case 3:{//főmenü 1-es menüpont->2-es menüpont
tomeg[modos]=String.valueOf(extra.Console.readInt("Mennyi az állat új tömege?"));
break;
}
case 4:{//főmenü 1-es menüpont->2-es menüpont
kor[modos]=String.valueOf(extra.Console.readInt("Mennyi idős az állat?"));
}
case 5:{//főmenü 1-es menüpont->2-es menüpont
break;
}
default: {//főmenü 1-es menüpont->2-es menüpont
System.out.println(RED+"Hibás értéket adott meg."+RESET);
}
}
} while(mod!=5);
}
else {
System.out.println("Nincs ilyen állat.");
}
System.out.println();
}catch(Exception e){
System.out.println(RED+"Hiba történt!: "+e.getMessage()+RESET);
}
}while(bevkeres!=5);
}catch(Exception e){
System.out.println(RED+"Hiba történt!: "+e.getMessage()+RESET);
}
break; -
Sk8erPeter
nagyúr
válasz
norbert1998 #7419 üzenetére
És a kerettantervben mi van? Az, hogy gyakoroltatni kell a ciklusokat és a tömbök használatát is, és most épp ott tartotok? Csak mert mint előbb írtam - szerkesztettem a hsz.-t közben -, ezekre ennél SOKKAL értelmesebb és használhatóbb példákat is ki lehetne találni, hogy megértsétek a használatát, meg hogy mire jó. Nagyon nem erre, amit mutattál.
És attól még, mert gyakorlatiasabb példákat vesztek, nem lenne muszáj eltérni a kerettantervtől. Most itt az infós kerettantervet fikázzuk, de még nem említette senki, hogy pontosan mi is van benne, ami szar (nekem most nincs kedvem rákeresni) - biztos egyébként bőven van miért szidni sok tekintetben, de nem ártana némi konkrét információval felvértezve fikázni.
Amúgy most akkor hogyan is alakítgattad a kódodat, ami nem működik? És akkor most mi a gond, hogy nem írja ki az első elemet? Kicsit nekem már zagyva a leírásod.
-
norbert1998
nagyúr
válasz
Sk8erPeter #7418 üzenetére
Az a baj, hogy senki nem tudja(se nem sejti), mi lesz az érettségin, csak a kerettantervre lehet támaszkodni. Abban meg ez a sok marhaság van.
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7416 üzenetére
"De miért a tanár a hülye, ha ez szerepel a kerettantervben? Csak nem mondhatja azt, hogy screw you és tanítaná azt, ami tényleg értelmes, aztán a hülye tanterv alapján felállított érettségin meg sorban megbukunk"
Az érettségin az ilyen C-szerű kódolást kérik számon Java-nyelven? Nagyon remélem, hogy nem. Ha meg nem, akkor a tanár hülye, hogy olyan szokásokat próbál belétek verni, amik ennél a programozási nyelvnél kifejezetten károsak, és ocsmánnyá teszik a kódot. Ha tényleg ilyet kérnek számon az érettségin is, akkor qrva nagy gáz van az ottani számonkéréssel is.Nem az van, hogy a tanár is most tanulgatja a Javát, és korábban más nyelvben programozott?
A ciklusok, tömbök gyakoroltatására létezne ezerszer értelmesebb és gyakorlatiasabb feladat is.(#7417): tehát akkor most mi is a kódod, ami nem működik?
-
norbert1998
nagyúr
Odáig tudtam elvinni, hogy a név tömb alapján fennáll, hogy a legelső elemet nem hajlnadó kiírni, de a kor, tömeg és gazda neve tömbbel tökéletesen működik, pedig egy az egyben copy paste, csak a műveleteknél a tömb nevét mondjuk nev-ről kor-ra írtam át.
És igen, a tömb tartalmazza azt az első elemet -
norbert1998
nagyúr
válasz
dabadab #7415 üzenetére
De miért a tanár a hülye, ha ez szerepel a kerettantervben? Csak nem mondhatja azt, hogy screw you és tanítaná azt, ami tényleg értelmes, aztán a hülye tanterv alapján felállított érettségin meg sorban megbukunk! (Igen, mert ebből a fajta tantervből (még hasonlóból sem) nem volt még sohasem érettségi, mi leszünk az elsők majd, két év múlva, szóval tapasztalat semmi nem lesz belőle senkinek. A tavalyi tanévtől 9.-esként kezdőknek (azaz nekünk is) van szakmai tantárgyuk, és kötelező belőle érettségizni, majd utána, ha az megvan, lehet menni technikumra.
Amúgy a félreértések elkerülése végett: Az említett 10 órából csak 2 programozás hetente.
-
dabadab
titán
válasz
norbert1998 #7414 üzenetére
"Elhiszem, de manapság mit nem bonyolítanak agyon a NAT-ban?"
Ez nem bonyolítás, hanem egy nagy kupac gőzőlgő szar. A jelek szerint a tanárnak fogalma sincs a Javaról, én a helyedben - ha érdekel a programozás - akkor elkezdenék önállóan foglalkozni az témával, mert ebből legfeljebb egy rakat kiírtandó rossz reflex lesz, rendes tudás semmiképpen sem.
-
norbert1998
nagyúr
válasz
dabadab #7413 üzenetére
Elhiszem, de manapság mit nem bonyolítanak agyon a NAT-ban? Az idei fizikatananyaghoz például jövő évi matektudás kellene. Azaz szögfüggvények, bármekkora méretű számokkal. Az érdekes meg az, hogy ebben a tanévben csak 90 fokig tanuljuk a szögfüggvényeket. Nem mintha a számológéppel nem lehetne megnézni, de ez olyan mint a gyök alatt 4. Lehet 2 és -2 is.
-
dabadab
titán
válasz
norbert1998 #7410 üzenetére
A problema az, hogy gyakorlatilag C64 BASIC-ben programoztok. Bar persze Javaban is lehet fix meretu tomboket hasznalni meg ezersoros methodokat irni, de ezek olyan dolgok, amiket egy rendes Java programozo csak nagyon kulonleges helyzetekben alkalmaz, ezeknek mar felsobb szinteken kellene elokerulniuk, semmikeppen sem kezdoknel.
-
norbert1998
nagyúr
válasz
WonderCSabo #7411 üzenetére
Osztályok nem voltak még. Ez van a tantervben, mást nem nagyon lehet tenni. A tanár meg konkrétan elfoglaltabb, mint az igazgató és amellett cirka 15 osztálynak szakmai tanára, csak a mi osztályunknak 10 órát tart egy héten, szóval kiegészíteni a kerettantervet kicsit húzós lenne.
Azt hiszem, javult egy kicsit a helyzet, mostmár keres rendesen, de az első találatot még mindig nem írja ki
-
WonderCSabo
félisten
válasz
norbert1998 #7408 üzenetére
Ezt a megoldást a tanár ajánlotta nektek? Mert ez borzalmas. Csináljatok egy Dog nevű osztályt, annak legyen név, gazda, tömeg, kor mezői, és rögtön elég egy tömbben tárolni. (Azt mondanám, hogy List-ben, de gondolom Collections még nem volt). Meg lehetne for ciklus while helyett, azt se vettétek még?
public class Dog {
public String name, owner, age, weight; // getter setter kéne, típus lehet szám, stb.
@Override
public String toString() {
return name + " " + owner + " " + age + " " + weight;
}
}
...
Dog[] dogs = new Dogs[500];
// read
int i = 0;
Dog dog = dogs[i];
while(dog != null) {
if (dog.name.equals(input)) {
System.out.println(dog);
}
dog = dogs[++i];
}Egyébként már a beolvasásnál el lehetne menteni, hány sor volt, és akkor lehetne addig menni a null ellenőrzés helyett.
Megelőztek.
-
dabadab
titán
válasz
norbert1998 #7408 üzenetére
Ez így nagyon gáz.
Egyrészt ez a nullig keresés olyan, mintha C-ben programoznál, márpedig a Java nem C, itt vannak rendes containerek, tessék azokat rendesen használni iterátorral. Másrészt meg ahelyett, hogy csinálnál ezer tömböt (listát, akármit) csinálhatnál egyet, amibe classokat raksz, minek van név, gazdnév, tömeg meg hasonló fieldje. -
norbert1998
nagyúr
Totál nem fog ma az agyam, egy ilyenen elakadok. Mit ronthatok el folyton?
A tömbök így vannak, és azok rendben is vannak. (Első oszlop:név, 2. oszlop gazdnev, 3. oszlop tomeg és a negyedik oszlop a kor.
A tömbök azért null-ig mennek, mert husszú tömbbel dolgozunk(pl 500 elemes), mert a tömb hosszának mindig változnia kellene.
Bukfenc;Pista;65;2
Bukfenc;Isti;65;2
Füsti;Pista;65;2
Füsti;Pista;65;2
Füsti;Pista;65;2
Füsti;Pista;65;2
Füsti;Pista;65;2Hibajelenség: Ha bukfencre keresek rá, semmit nem talál, ha füstire, akkor talál, meg a végére kidob egy null;null;null;null-ot, mint 7. találat.
String kereses=extra.Console.readLine("Milyen nevet keressünk?");
db=0;
i=0;
while (nev[i]!=null){
if (kereses.equals(nev [i])){
modvalogatas[db++]=i+1;
}
i++;
}
if(db!=0){
System.out.println("Az alábbi találat(ok) keletkeztek. ");
for (int j=0;j<db;j++){
System.out.println(modvalogatas[j]+"-"+nev[modvalogatas[j]]+";"+gazdnev[modvalogatas[j]]+";"+kor[modvalogatas[j]]+"év;"+tomeg[modvalogatas[j]]);
} -
KAMELOT
titán
Sziasztok!
Szeretnék megtanulni JAVA programozni. Ehhez kéne nekem progi valamint magyar pdf vagy word fájl amiben minden pontosan le van írva.
Progit próbáltam leszedni, de nem húzott semmit. Valaki valami linket tudna dobni!
Elősre is köszönöm a segítségeteket! -
tick
aktív tag
próbálta már valaki a VS "code" (ingyenes, Linuxon is futó) verzióját? én vagyok béna vagy tényleg nem tud java-t futtatni?
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Akciófigyelő: Ingyenes Steamen a Borderlands 2
- A fociról könnyedén, egy baráti társaságban
- CASIO órák kedvelők topicja!
- iPhone topik
- Kerékpárosok, bringások ide!
- Nintendo Switch 2
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- HiFi műszaki szemmel - sztereó hangrendszerek
- Elektromos cigaretta 🔞
- Luck Dragon: Asszociációs játék. :)
- További aktív témák...
- DJI Mini 4 pro - Fly More Combo - RC2 drón szett +128GB SanDisk SD
- ÚJ Lenovo Legion Pro 5 16IRX9 - 16" WQXGA 165Hz - i5 14500HX - 32GB - 1TB - RTX 4060 - 3 év garancia
- T14s Gen4 14" FHD+ IPS i7-1365U 16GB 512GB NVMe magyar bill IR kam gar
- Gopro hero 7 black
- ThinkBook 16p Gen3 16" QHD+ IPS Ryzen 5 6600H RTX 3060 16GB 512GB NVMe ujjlolv gar
- Xiaomi Redmi 12 Pro 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Csere-Beszámítás! Számítógép PC Játékra! I5 14400F / RTX 4060ti 16GB / 32GB DDR5 / 1TB SSD
- Apple iPhone 14 Pro, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! Gigabyte B85-HD3 B85 chipset alaplap garanciával hibátlan működéssel
- Telefon felvásárlás!! Xiaomi Redmi Note 12, Xiaomi Redmi Note 12 Pro, Xiaomi Redmi Note 12 Pro+
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged