- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Gurulunk, WAZE?!
- Archttila: SMART tesztelés automatizálva: smartctl poller script Zsh-ban, RPi-re
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- gban: Ingyen kellene, de tegnapra
- btz: Internet fejlesztés országosan!
- sziku69: Fűzzük össze a szavakat :)
- Parci: Milyen mosógépet vegyek?
- bacsis: Gyere el a 11. BRSZK-ra!
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
Lortech
addikt
Hi!
Lenne két darab, általam kreált class:
QueueArray<E>;
QueueLinked<E>;
Tesztben szeretnek hozza írni egy olyan (generikus?) metódust ami elfogadja mindkettőt bemenő paraméterként. Lehet ilyen csinálni? Ha igen mi a paraméter típusa?
Eddig ezzel próbálkoztam:
public static <E> long counter(Collection<E> c, int r)
Koszi
Kell nekik egy közös ős, interface vagy base class, pl.
public interface Queue<E> {...}
aztán
public class QueueArray<E> implements Queue<E> {}
végül
public static <E> long counter(Queue<E> c, int r) {Persze nem írtad, hogy néz ki az általad kreált két class és hol lenne ez a metódus, illetve nem tudni pontosan mit akarsz ezzel, de gyanús, hogy érdemesebb lenne eleve az interface-be vagy base-be tenni ezt a countert, példány szinten.
-
axioma
veterán
Ja maradt az arraylist, az a legkézenfekvőbb. De valamiért, a leadó system testje vmiert ezt a hibát írja ki:
Removed two elements but the second one had a lower priority than the first one! Amit nem értek. Amugy itt van a programom(class nevet most atneveztem):
import java.util.ArrayList;
public class MyPriorityQueue<T extends Comparable<T>> {
private ArrayList<T> queue;
private int maxElements;
public MyPriorityQueue(int maxElements){
this.maxElements = maxElements;
queue = new ArrayList<T>();
}
public void add(T e) throws IllegalStateException{
if( size() == maxElements)
throw new IllegalStateException("The queue is already full!");
queue.add(e);
int i = size()-1 ;
T help;
while ( i > 0 && ( queue.get( parent(i) ).compareTo( queue.get(i) ) ) > 0 ){
help = queue.get(i);
queue.set(i,queue.get( parent(i) ));
queue.set(parent(i), help);
i = parent(i);
}
}
public T pop() throws IllegalStateException{
if(queue.isEmpty())
throw new IllegalStateException("The queue is empty!");
T min = queue.get(0);
queue.remove(0);
minheapify(0);
return min;
}
public int size(){
return queue.size();
}
public int parent(int i){
return (i - 1) / 2;
}
public void minheapify(int i){
int l = i*2+1;
int r = l+1;
int min;
T help;
if (l <= size()-1 && ( queue.get(l).compareTo( queue.get(i) ) ) < 0 )
min = l;
else
min = i;
if (r <= size()-1 && ( queue.get(r).compareTo( queue.get(min) ) ) < 0)
min = r;
if (min != i){
help = queue.get(i);
queue.set(i,queue.get(min));
queue.set(min, help);
minheapify(min);
}
}
public void display(){
for(int i = 0; i < queue.size(); i++) {
System.out.print(queue.get(i) + " ");
}
}
}Argh, a megvan-os hsz-edet figyelmetlenul olvastam, azert benne hagyom mert ha ott insert-alsz, akkor talalsz me'g ebben hasznos infot.
En azt nem ertem, hogy miert veszed kulon a torlest es a heapify-t... torolsz az _elejerol_ (ami implementaciofuggo, de a vegerol torles csak olcsobb vagy ugyanannyi lehet, mint az elejerol), holott neked az elejen kell a hely, az utolso elemet kene csak odahelyezni es lekuldeni.
Bocs, java kodban nincs epp keznel, de pythonban ugyanez a kivetel (a tombindexeles ellenere az egy lista, a pop() meg az utolso elemet tavolitja el es adja ertekul):print mylist[0]
if cou==1: # itt van az aktualis meret
mylist=[]
cou=0
else:
act=mylist.pop()
cou-=1
tmp=0
while (tmp*2+1<cou and mylist[tmp*2+1]>act) or (tmp*2+2<cou and mylist[tmp*2+2]>act):
if tmp*2+2==cou or mylist[tmp*2+1]>mylist[tmp*2+2]:
mylist[tmp]=mylist[tmp*2+1]
tmp=tmp*2+1
else:
mylist[tmp]=mylist[tmp*2+2]
tmp=tmp*2+2
mylist[tmp]=actEgyebkent most hogy nezem a kodod, pont ez a baj! Hiszen az eltavolitas utan lesz egy olyan listad, ami az uj index miatt mar nem is heap! Ez szerintem egy erosen kerulendo koztes allapotkent is... Be kene elore szurni magat az utolso elemet, es arra hivni a heapify-t, de akkor mar egyszerubb ez az on-the-fly modszer (amig nem teszed be, addig csak orzod hasonlitasra, majd a vegleges helyen adod ertekul).
-
#74220800
törölt tag
Ja maradt az arraylist, az a legkézenfekvőbb. De valamiért, a leadó system testje vmiert ezt a hibát írja ki:
Removed two elements but the second one had a lower priority than the first one! Amit nem értek. Amugy itt van a programom(class nevet most atneveztem):
import java.util.ArrayList;
public class MyPriorityQueue<T extends Comparable<T>> {
private ArrayList<T> queue;
private int maxElements;
public MyPriorityQueue(int maxElements){
this.maxElements = maxElements;
queue = new ArrayList<T>();
}
public void add(T e) throws IllegalStateException{
if( size() == maxElements)
throw new IllegalStateException("The queue is already full!");
queue.add(e);
int i = size()-1 ;
T help;
while ( i > 0 && ( queue.get( parent(i) ).compareTo( queue.get(i) ) ) > 0 ){
help = queue.get(i);
queue.set(i,queue.get( parent(i) ));
queue.set(parent(i), help);
i = parent(i);
}
}
public T pop() throws IllegalStateException{
if(queue.isEmpty())
throw new IllegalStateException("The queue is empty!");
T min = queue.get(0);
queue.remove(0);
minheapify(0);
return min;
}
public int size(){
return queue.size();
}
public int parent(int i){
return (i - 1) / 2;
}
public void minheapify(int i){
int l = i*2+1;
int r = l+1;
int min;
T help;
if (l <= size()-1 && ( queue.get(l).compareTo( queue.get(i) ) ) < 0 )
min = l;
else
min = i;
if (r <= size()-1 && ( queue.get(r).compareTo( queue.get(min) ) ) < 0)
min = r;
if (min != i){
help = queue.get(i);
queue.set(i,queue.get(min));
queue.set(min, help);
minheapify(min);
}
}
public void display(){
for(int i = 0; i < queue.size(); i++) {
System.out.print(queue.get(i) + " ");
}
}
}Megvan! Törlésnél elfelejtettem az uccso elemet az első helyre rakni, igy azzal kezdeni restructure-t.
-
axioma
veterán
Amúgy a feladatom az lenne, hogy saját kezűleg kell implementalni egy priorityqueque-t, minheap struktúrával,
az alábbi interface segitsegevel:/**
* Manages elements within a priority queue. All Elements in this queue must
* implement the Comparable interface. If a element is requested from this data
* structure the smallest one is returned. If there are multiple smallest
* elements, one of them must be returned.
*/
public class PriorityQueue<T extends Comparable<T>> {
/**
* @param maxElements The maximum number of elements this queue can hold.
*/
public PriorityQueue(int maxElements);
/**
* Add e to the queue.
*
* @param e The element which sould be inserted (at the correct position) into the queue.
* @throws IllegalStateException if the queue is already full
*/
public void add(T e) throws IllegalStateException;
/**
* Returns and removes the smallest element in the queue.
*
* @return the smallest element
* @throws IllegalStateException if the queue is empty
*/
public T pop() throws IllegalStateException;
/**
* Return the current number of elements in the queue.
*
* @return the number of elements
*/
public int size();
}Es nem tudom, hogy milyen classot használhatnék e szerint az adatok belső menedzselésére.
A baj az, hogy a beepitett java PriorityQueue is minheapet használ.LinkedList<E> ill. ArrayList<E> szeretnek használni hozza.
Vagy a fenti feladat azt jelenti, hogy a bepitett PriorityQueue-hoz felülirom a pop() es add() metódusokat?
De akkor meg nem tudok indexeket hasznalni, és az algoritmus alapján szerintem mindenképpen olyan kell, ami indexelhető. Nem tudom ...
1. En ugy ertenem a feladatot ahogy a tobbiek irtak (nem a java.util-ost definialod felul, hanem azt nem include-olva magad irsz egyet)
2. Ha igy teszel, miert baj az, hogy a beepitett is minheap-et hasznal? ArrayList, megirod a minheap-nek a sullyeszt meg buborekol vagy hogy hivtatok fuggvenyet, vagy hat kozvetlen beleirod az add/pop kodjaba, es ennyi.
Bar a maxelements miatt akar sima tombot is hasznalhatsz, persze akkor kulon kell tarolni es managelni a size aktualis erteket (vagy legalabbis erdemes, ha nem akarod mindig megkeresni az elso null-t). Felesleges ha ott az arraylist bekorlatozni magad, de lehet, hogy iskolapeldakent inkabb azt irnam meg. -
Sirpi
senior tag
Es ha mondjuk ez a fix fejléc (házi része):
Public class PriorityQueue<T extends Comparable<T>>
akkor ennek a constructor-javal lehet akar arraylistet is letrehozni?
valahogy igy:
public class PriorityQueue<T extends Comparable<T>> {
private ArrayList<T> queue;
private int maxElements;
public PriorityQueue(int maxElements){
this.maxElements = maxElements;
queue = new ArrayList<T>();
}Szóval a problémám az hogy a classom neve megyezeik( a feladat kiirasat be kell tartani...) a java collectionban levő egyik class nevével (PriorityQueue), akkor ez azt jelenti, hogy csak ennek megfelelő classot tudok letrehozni a classommal, vagy akarmit, mert a peldanyositasnal a standard class nevet felülirja, es azt csinalja vele amit en definialtam?
Mivel a PriorityQueue a java.util-ban van, ezért ha nem húzod be importtal, nem fognak "összeakadni"
Amúgy meg ha kellene mindkettő ugyanabban az osztályban, akkor az egyiket teljes eléréssel (pl. java.util.PriorityQueue), a másikat importálva tudod használni. -
emvy
félisten
Sziasztok!
Van egy ilyen class fejlécem amely fix:
public class MyClass<T extends Comparable<T>>
Es mondjuk konstruktorban egy arraylistet szeretnek létrehozni, amely T típusú adatokat tartalmaz, amelyeke szeretnem használni compareTo metódust, akkor helyesen járok el:
public class MyClass<T extends Comparable<T>> {
private ArrayList<T> queue;
public MyClass(){
queue = new ArrayList<T>();
}
}1.Szóval nem kell meg egyszer az arraylistnel a comparable interfacet implementalni:
private ArrayList< Textends Comparable<T>>.2. A fenti class-ra miert nem eszi meg az alabbi peladanyositast:
MyClass<Integer> myqueue = new MyClass<Integer>();Köszi
> miert nem eszi meg
megeszi
-
#74220800
törölt tag
@emvy , @disy68, thx. Vegul sikerült egyszerűbben megoldanom, de újabb problémába akadtam..

Gyorsrendezést kellene kivitelezni javaban, úgy hogy pivotkent mindig a résztömb utolsó két elemének a lekerekített átlagát kell venni. A kódom működik, úgy ha a pivot mindig résztömb utolsó eleme. Az előző verzióval vmi félrecsúszik. Hálás lennek ha valaki bele tudna kukkantani.
Itt a teszt hozza:
class gyors {
public static void main(String[] args) {
Integer [] a = {-8, -2, -4, -3, -10, -4, -9, -2, -9, -11};
qyors(a,0,a.length-1);
for (int j = 0; j < a.length ; j++) {
System.out.print(a[j] + " ");
}
}
public static void qyors(Integer [] a, int p, int r){
if ( p < r){
int q = Partition(a,p,r);
qyors(a, p, q - 1);
qyors(a, q + 1 , r);
}
}
public static int Partition(Integer [] a, int p, int r){
Integer x = (a[r]+a[r-1])/2; //a resztomb utolso ket elemenek a lekerekitett atlaga kene pivotnak
//Integer x = a[r]; //ezzel mukodik
int i = p - 1;
Integer help;
for (int j = p; j < r ; j++) {
if( a[j] <= x ){
i++;
help = a[i];
a[i] = a[j];
a[j] = help;
}
}
help = a[i+1];
a[i+1] = a[r];
a[r] = help;
return i+1;
}
}Megvan. Hanyagoljuk az előzőt.
-
disy68
aktív tag
Sziasztok!
Néhány algoritmusnak kéne lemernem a tényleges futási idejét. Ehhez szeretnek egy olyan metódust csinálni ami paraméterként elfogad egy másik metódust(az algoritmust) es annak visszaadja a runtimet.
Tudom több megoldas is van a neten rá, de nekem kicsit zavarosak.Legegyszerűbben hogyan tudnám kivitelezni hogy működjön a counter metódusom alább?class SorterTest {
public static void main(String[] args) {
long l = counter(Sorter.quicksort(a));
}
public static long counter(Method method){
long startTime = System.currentTimeMillis();
method();
long stopTime = System.currentTimeMillis();
return stopTime - startTime;
}
}Java 8 alatt van lehetőség metódus referenciát átadni. Akár az alábbihoz hasonlóan is elindulhatsz:
public class MethodRuntimeChecker {
public static void main(String[] args) {
QuickSorter sorter = new QuickSorter();
int[] array = getNumbers(10_000);
System.out.println(mesureRunTimeNano(sorter::sort, array) + " ns");
System.out.println(mesureRunTimeMilli(sorter::sort, array) + " ms");
}
public static long mesureRunTimeNano(Function<int[], int[]> intSorter, int[] toBeSorted) {
long start = System.nanoTime();
intSorter.apply(toBeSorted);
return System.nanoTime() - start;
}
public static long mesureRunTimeMilli(Function<int[], int[]> intSorter, int[] toBeSorted) {
long start = System.currentTimeMillis();
intSorter.apply(toBeSorted);
return System.currentTimeMillis() - start;
}
private static int[] getNumbers(int count) {
int[] numbers = new int[count];
Random random = new Random();
for (int i = 0; i < count; i++) {
numbers[i] = random.nextInt(count);
}
return numbers;
}
} -
emvy
félisten
Sziasztok!
Néhány algoritmusnak kéne lemernem a tényleges futási idejét. Ehhez szeretnek egy olyan metódust csinálni ami paraméterként elfogad egy másik metódust(az algoritmust) es annak visszaadja a runtimet.
Tudom több megoldas is van a neten rá, de nekem kicsit zavarosak.Legegyszerűbben hogyan tudnám kivitelezni hogy működjön a counter metódusom alább?class SorterTest {
public static void main(String[] args) {
long l = counter(Sorter.quicksort(a));
}
public static long counter(Method method){
long startTime = System.currentTimeMillis();
method();
long stopTime = System.currentTimeMillis();
return stopTime - startTime;
}
}Ne metodust fogadjon, hanem pl. egy Runnable-t. Viszont ovatosan ezzel, mert a Java performance benchmarking nagyon nem trivialis dolog (foleg a JIT miatt).
-
mobal
nagyúr
Sziasztok!
Néhány algoritmusnak kéne lemernem a tényleges futási idejét. Ehhez szeretnek egy olyan metódust csinálni ami paraméterként elfogad egy másik metódust(az algoritmust) es annak visszaadja a runtimet.
Tudom több megoldas is van a neten rá, de nekem kicsit zavarosak.Legegyszerűbben hogyan tudnám kivitelezni hogy működjön a counter metódusom alább?class SorterTest {
public static void main(String[] args) {
long l = counter(Sorter.quicksort(a));
}
public static long counter(Method method){
long startTime = System.currentTimeMillis();
method();
long stopTime = System.currentTimeMillis();
return stopTime - startTime;
}
}Én tesztet írnék erre. Előtte és utána time, majd különbség. Kb. 3 sor egy teszt.
-
tboy93
nagyúr
-
#74220800
törölt tag
-
#74220800
törölt tag
Na az előző verzió majdnem jó. Valamiért néha sorokon vagy oszlopokon belül berakja egymás mellé a hajókat. Kiszedtem belőle egy kisebb reszt. Ez a hatodik sorba próbál berakni két darab 4es hajót véletlenül.
Sajnos néha egymás mellé.. Valaki jöjjön plsssssssssss.public class Tesztsor{ //java Tesztsor
public static void main(String[] args){
int [] randomatrix ={0,1,2,3,4,5,6,7,8,9};
boolean[][] hajok = new boolean [10][10];
for(int j = 0; j < randomatrix.length; j++){
int w = (int)(Math.random()*10);
int g = randomatrix[w];
randomatrix[w] = randomatrix[j];
randomatrix[j] = g;
}
hajokatSorra(5, randomatrix, 4, hajok);
hajokatSorra(5, randomatrix, 4, hajok);
for(int i = 0; i < hajok.length; i++){
for(int j = 0; j < hajok[i].length; j++){
if (hajok[i][j])
System.out.print("H");
else
System.out.print("-");
}
System.out.println();
}
}
public static boolean hajokatSorra(int x, int[] arr, int size, boolean[][] hajok ){
boolean shipreadyleft = false;
boolean shipreadyright = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( hajok[x][j] ){
if ( point - j >= 2 ) shipreadyleft =true;
break;
}
if( hajok[ Math.max(0,x-1)][j] || hajok[ Math.min(9,x+1)][j] ){
if (point - j >= 1 ) shipreadyleft =true;
break;
}
if( j == 0 ) shipreadyleft =true;
}
if (shipreadyleft){
for( int j = point; j < hajok.length; j++){
if( hajok[x][j] ){
if( j - point >= size + 1 ) shipreadyright =true;
break;
}
if( hajok[ Math.max(0,x-1)][j] || hajok[ Math.min(9,x+1)][j] ){
if ( j - point >= size ) shipreadyright =true;
break;
}
if( j == hajok.length - 1 && hajok.length - 1 - point >= size - 1 ) shipreadyright =true;
}
}
if ( shipreadyright ){
for( int j = point; j - point + 1 <= size; j++){
hajok[x][j] = true;
}
}
if ( shipreadyright && shipreadyleft) break;
}
return shipreadyright && shipreadyleft;
}
}Ez jó, nekem manuálisan nem engedi lerakni közvetlen egymás melle két hajót, szinte bárhogy próbáltam. A véletlen mátrix sorrendjével valamikor pedig összejön, ezt nem értem...
-
#74220800
törölt tag
Najo hajotSorra() es a hajotOszlopra() metódusoknál elszámoltam magam.De meg mindig nem jő. Ha van aki velem számol (9244,9245 hozz), itt a frissitett verzio:
public class torpedo {
private final int rows;
private final int cols;
private final boolean[][] hits;
private final boolean[][] ships;
public torpedo (int numRows, int numCols) {
this.rows = numRows;
this.cols = numCols;
this.hits = new boolean[rows][cols];
this.ships = new boolean[rows][cols];
}
public void startGame() {
placeShips();
printfield();
}
private void placeShips() {
int [] shiporder ={2,2,2,2,3,3,3,4,4,5};
for(int j = 0; j < shiporder.length; j++){
int n = (int)(Math.random()*10);
int b = shiporder[n];
shiporder[n] = shiporder[j];
shiporder[j] = b;
}
int [] randomarray ={0,1,2,3,4,5,6,7,8,9};
for(int j = 0; j < randomarray.length; j++){
int w = (int)(Math.random()*10);
int g = randomarray[w];
randomarray[w] = randomarray[j];
randomarray[j] = g;
}
for(int j = 0; j < shiporder.length; j++){
int ship = shiporder[j];
int e = (int)(Math.random()*2);
if ( e == 0 && (hajotVizszintesre( randomarray, ship) ||hajotFuggolegesre( randomarray, ship ) ));
if ( e == 1 && ( hajotFuggolegesre( randomarray, ship) || hajotVizszintesre( randomarray, ship ) ));
}
}
public boolean hajotSorra(int x, int[] arr, int size){
boolean shipreadyleft = false;
boolean shipreadyright = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( ships[x][j] ){
if ( point - j >= 2 ) shipreadyleft =true;
break;
}
if( ships[ Math.max(0,x-1)][j] || ships[ Math.min(9,x+1)][j] ){
if (point - j >= 1 ) shipreadyleft =true;
break;
}
if( j == 0 ) shipreadyleft =true;
}
if (shipreadyleft){
for( int j = point; j < ships.length; j++){
if( ships[x][j] ){
if( j - point >= size + 1 ) shipreadyright =true;
break;
}
if( ships[ Math.max(0,x-1)][j] || ships[ Math.min(9,x+1)][j] ){
if ( j - point >= size ) shipreadyright =true;
break;
}
if( j == ships.length - 1 && ships.length - 1 - point >= size - 1 ) shipreadyright =true;
}
}
if ( shipreadyright ){
for( int j = point; j - point + 1 <= size; j++){
ships[x][j] = true;
}
}
if ( shipreadyright && shipreadyleft) break;
}
return shipreadyright && shipreadyleft;
}
public boolean hajotOszlopra (int y, int[] arr, int size){
boolean shipreadyup = false;
boolean shipreadydown = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( ships[j][y] ){
if (point - j >= 2) shipreadyup =true;
break;
}
if( ships[j][ Math.max(0,y-1)] || ships[j][Math.min(9,y+1)]){
if (point - j >= 1) shipreadyup =true;
break;
}
if( j == 0 ) shipreadyup =true;
}
if (shipreadyup){
for( int j = point; j < ships.length; j++){
if( ships[j][y]){
if (j - point >= size + 1 ) shipreadydown =true;
break;
}
if(ships[j][ Math.max(0,y-1)] || ships[j][Math.min(9,y+1)]){
if (j - point >= size ) shipreadydown =true;
break;
}
if( j == ships.length - 1 && ships.length - 1 - point >= size - 1 ) shipreadydown =true;
}
}
if ( shipreadydown ){
for( int j = point; j - point + 1 <= size; j++){
ships[j][y] = true;
}
}
if ( shipreadydown && shipreadyup ) break;
}
return shipreadydown && shipreadyup;
}
public boolean hajotVizszintesre(int[] arr, int size){
for( int k = 0; k < arr.length; k++){
int p1 = arr[k];
if ( hajotSorra(p1, arr, size)) return true;
}
return false;
}
public boolean hajotFuggolegesre(int[] arr, int size){
for( int k = 0; k < arr.length; k++){
int p2 = arr[k];
if ( hajotOszlopra(p2, arr, size )) return true;
}
return false;
}
public void printfield(){
for(int i = 0; i < ships.length; i++){
for(int j = 0; j < ships[i].length; j++){
if (ships[i][j])
System.out.print("H");
else
System.out.print("-");
}
System.out.println();
}
}
}Na az előző verzió majdnem jó. Valamiért néha sorokon vagy oszlopokon belül berakja egymás mellé a hajókat. Kiszedtem belőle egy kisebb reszt. Ez a hatodik sorba próbál berakni két darab 4es hajót véletlenül.
Sajnos néha egymás mellé.. Valaki jöjjön plsssssssssss.public class Tesztsor{ //java Tesztsor
public static void main(String[] args){
int [] randomatrix ={0,1,2,3,4,5,6,7,8,9};
boolean[][] hajok = new boolean [10][10];
for(int j = 0; j < randomatrix.length; j++){
int w = (int)(Math.random()*10);
int g = randomatrix[w];
randomatrix[w] = randomatrix[j];
randomatrix[j] = g;
}
hajokatSorra(5, randomatrix, 4, hajok);
hajokatSorra(5, randomatrix, 4, hajok);
for(int i = 0; i < hajok.length; i++){
for(int j = 0; j < hajok[i].length; j++){
if (hajok[i][j])
System.out.print("H");
else
System.out.print("-");
}
System.out.println();
}
}
public static boolean hajokatSorra(int x, int[] arr, int size, boolean[][] hajok ){
boolean shipreadyleft = false;
boolean shipreadyright = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( hajok[x][j] ){
if ( point - j >= 2 ) shipreadyleft =true;
break;
}
if( hajok[ Math.max(0,x-1)][j] || hajok[ Math.min(9,x+1)][j] ){
if (point - j >= 1 ) shipreadyleft =true;
break;
}
if( j == 0 ) shipreadyleft =true;
}
if (shipreadyleft){
for( int j = point; j < hajok.length; j++){
if( hajok[x][j] ){
if( j - point >= size + 1 ) shipreadyright =true;
break;
}
if( hajok[ Math.max(0,x-1)][j] || hajok[ Math.min(9,x+1)][j] ){
if ( j - point >= size ) shipreadyright =true;
break;
}
if( j == hajok.length - 1 && hajok.length - 1 - point >= size - 1 ) shipreadyright =true;
}
}
if ( shipreadyright ){
for( int j = point; j - point + 1 <= size; j++){
hajok[x][j] = true;
}
}
if ( shipreadyright && shipreadyleft) break;
}
return shipreadyright && shipreadyleft;
}
} -
xTc
aktív tag
Sziasztok!
Segítségeteket kérném. Le kell adnom egy torpedó játékot, úgy érzem a koncepcióm jó, de valahol valami félrecsúszott a megvalósításban. Közeleg a határidő, és a sorok kezdenek összefolyni, A kódom szerintem jó strukturált, nem hosszú, és a téma is érdekes. Örülnek ha valaki bele tudna kukkantani.
Szóval egy 10*10 mezőre kéne feldobni véletlenszerűen 10 darab hajót (4db 2es méretűt, 3db 3as, 2 db 4es, 1db 5os) vízszintesen vagy függőlegesen, úgy hogy a hajók csak a sarkoknál érintkezhetnek, máshol egy szabad helyet kell hagyni közöttük.
Algoritmusom a következő:
-Generálok egy véletlen sorrendű mátrixot a hajók méreteivel, és eszerint próbálom őket felpakolni a fieldre.
-generálok egy véletlen számot, hogy a hajót először vízszintesen (addig megyek a sorokban amíg találok neki helyet) vagy függőlegesen( addig....az oszlopokban..) próbálja felrakni
-Generálok egy másik véletlen sorrendű mátrixot a field index számaival. Az index egyrészt a sorokra vagy oszlopokra tett próbálkozások, ill. az adott sorban vagy oszlopban a hajó kezdőpontjára tett kísérleteknek a sorrendjét is jelöli. Minden hajót eszerint próbálok feltenni.
-Ha egy hajót se egyik sorrba se egyik oszlopba nem lehet berakni, kezdődik a cirkusz előröl. (ide a loop meg hianyzik)
-Biztos van sokkal jobba algoritmus az enyémnél, hatékonysága kérdéses, de ha nem elvetemült az ötletem, ragaszkodnék az enyémhez (idő hiánya miatt is), ezt kéne valahogy működésre bírni....
Néhány metódus magyarázat:
hajotSorra(int x, int[] arr, int size): a size méretű hajót próbálja berakni az x.dik sorba, az arr matrix szerinti kezdőpontsorrenddel balról jobbra.
hajotOszlopra(int y, int[] arr, int size): a size méretű hajót próbálja berakni az y.dik oszlopba, az arr matrix szerinti kezdőpontsorrenddel fentről lefele.
hajotVizszintesre(int[] arr, int size): a hajot az arr szerinti sorsorrendbe próbálja berakni valamelyik sorba.
public boolean hajotFuggolegesre: a hajot az arr szerinti oszlopsorrendbe próbálja berakni valamelyik oszlopba.
Es a kicsike:
public class torpedo {
private final int rows;
private final int cols;
private final boolean[][] hits;
private final boolean[][] ships;
public torpedo (int numRows, int numCols) {
this.rows = numRows;
this.cols = numCols;
this.hits = new boolean[rows][cols];
this.ships = new boolean[rows][cols];
}
public void startGame() {
placeShips();
printfield();
}
private void placeShips() {
int [] shiporder ={2,2,2,2,3,3,3,4,4,5};
for(int j = 0; j < shiporder.length; j++){
int n = (int)(Math.random()*10);
int b = shiporder[n];
shiporder[n] = shiporder[j];
shiporder[j] = b;
}
int [] randomarray ={0,1,2,3,4,5,6,7,8,9};
for(int j = 0; j < randomarray.length; j++){
int w = (int)(Math.random()*10);
int g = randomarray[w];
randomarray[w] = randomarray[j];
randomarray[j] = g;
}
for(int j = 0; j < shiporder.length; j++){
int ship = shiporder[j];
int e = (int)(Math.random()*2);
if ( e == 0 && (hajotVizszintesre( randomarray, ship) ||hajotFuggolegesre( randomarray, ship ) ));
if ( e == 1 && ( hajotFuggolegesre( randomarray, ship) || hajotVizszintesre( randomarray, ship ) ));
}
}
public boolean hajotSorra(int x, int[] arr, int size){
boolean shipreadyleft = false;
boolean shipreadyright = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( ships[x][j] || ships[ Math.max(0,x-1)][j] || ships[ Math.min(9,x+1)][j] ){
if (point - j >= 2) shipreadyleft =true;
break;
}
if( !ships[x][0] && !ships[ Math.max(0,x-1)][0] && !ships[ Math.min(9,x+1)][0] ) shipreadyleft =true;
}
if (shipreadyleft){
for( int j = point; j < ships.length; j++){
if( ships[x][j] || ships[ Math.max(0,x-1)][j] || ships[ Math.min(9,x+1)][j]){
if (j - point >= size + 1 ) shipreadyright =true;
break;
}
if( !ships[x][ships.length-1] && !ships[ Math.max(0,x-1)][ships.length-1] && !ships[ Math.min(9,x+1)][ships.length-1] && ships.length - 1 - point >= size + 1 ) shipreadyright =true;
}
}
if ( shipreadyright ){
for( int j = point; j - point + 1 <= size; j++){
ships[x][j] = true;
}
}
if ( shipreadyright && shipreadyleft) break;
}
return shipreadyright && shipreadyleft;
}
public boolean hajotOszlopra(int y, int[] arr, int size){
boolean shipreadyup = false;
boolean shipreadydown = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( ships[j][y] || ships[j][ Math.max(0,y-1)] || ships[j][Math.min(9,y+1)] ){
if (point - j >= 2) shipreadyup =true;
break;
}
if( !ships[0][y] && !ships[0][ Math.max(0,y-1)] && !ships[0][Math.min(9,y+1)] ) shipreadyup =true;
}
if (shipreadyup){
for( int j = point; j < ships.length; j++){
if( ships[j][y] || ships[j][ Math.max(0,y-1)] || ships[j][Math.min(9,y+1)]){
if (j - point >= size + 1 ) shipreadydown =true;
break;
}
if( !ships[ships.length-1][y] && !ships[ships.length-1][ Math.max(0,y-1)] && !ships[ships.length-1][Math.min(9,y+1)] && ships.length - 1 - point >= size + 1 ) shipreadydown =true;
}
}
if ( shipreadydown ){
for( int j = point; j - point + 1 <= size; j++){
ships[j][y] = true;
}
}
if ( shipreadydown && shipreadyup ) break;
}
return shipreadydown && shipreadyup;
}
public boolean hajotVizszintesre(int[] arr, int size){
for( int k = 0; k < arr.length; k++){
int p1 = arr[k];
if ( hajotSorra(p1, arr, size)) return true;
}
return false;
}
public boolean hajotFuggolegesre(int[] arr, int size){
for( int k = 0; k < arr.length; k++){
int p2 = arr[k];
if ( hajotOszlopra(p2, arr, size )) return true;
}
return false;
}
public void printfield(){
for(int i = 0; i < ships.length; i++){
for(int j = 0; j < ships[i].length; j++){
if (ships[i][j])
System.out.print("H");
else
System.out.print("-");
}
System.out.println();
}
}
}Szia,
nem kötekedésképpen, de osztálynevet nagykezdőbetűvel írunk. Egy pár unit teszt sokat segíthetne azon, hogy lásd melyik része nem úgy működik, ahogy szeretnéd.
-
#74220800
törölt tag
Sziasztok!
Segítségeteket kérném. Le kell adnom egy torpedó játékot, úgy érzem a koncepcióm jó, de valahol valami félrecsúszott a megvalósításban. Közeleg a határidő, és a sorok kezdenek összefolyni, A kódom szerintem jó strukturált, nem hosszú, és a téma is érdekes. Örülnek ha valaki bele tudna kukkantani.
Szóval egy 10*10 mezőre kéne feldobni véletlenszerűen 10 darab hajót (4db 2es méretűt, 3db 3as, 2 db 4es, 1db 5os) vízszintesen vagy függőlegesen, úgy hogy a hajók csak a sarkoknál érintkezhetnek, máshol egy szabad helyet kell hagyni közöttük.
Algoritmusom a következő:
-Generálok egy véletlen sorrendű mátrixot a hajók méreteivel, és eszerint próbálom őket felpakolni a fieldre.
-generálok egy véletlen számot, hogy a hajót először vízszintesen (addig megyek a sorokban amíg találok neki helyet) vagy függőlegesen( addig....az oszlopokban..) próbálja felrakni
-Generálok egy másik véletlen sorrendű mátrixot a field index számaival. Az index egyrészt a sorokra vagy oszlopokra tett próbálkozások, ill. az adott sorban vagy oszlopban a hajó kezdőpontjára tett kísérleteknek a sorrendjét is jelöli. Minden hajót eszerint próbálok feltenni.
-Ha egy hajót se egyik sorrba se egyik oszlopba nem lehet berakni, kezdődik a cirkusz előröl. (ide a loop meg hianyzik)
-Biztos van sokkal jobba algoritmus az enyémnél, hatékonysága kérdéses, de ha nem elvetemült az ötletem, ragaszkodnék az enyémhez (idő hiánya miatt is), ezt kéne valahogy működésre bírni....
Néhány metódus magyarázat:
hajotSorra(int x, int[] arr, int size): a size méretű hajót próbálja berakni az x.dik sorba, az arr matrix szerinti kezdőpontsorrenddel balról jobbra.
hajotOszlopra(int y, int[] arr, int size): a size méretű hajót próbálja berakni az y.dik oszlopba, az arr matrix szerinti kezdőpontsorrenddel fentről lefele.
hajotVizszintesre(int[] arr, int size): a hajot az arr szerinti sorsorrendbe próbálja berakni valamelyik sorba.
public boolean hajotFuggolegesre: a hajot az arr szerinti oszlopsorrendbe próbálja berakni valamelyik oszlopba.
Es a kicsike:
public class torpedo {
private final int rows;
private final int cols;
private final boolean[][] hits;
private final boolean[][] ships;
public torpedo (int numRows, int numCols) {
this.rows = numRows;
this.cols = numCols;
this.hits = new boolean[rows][cols];
this.ships = new boolean[rows][cols];
}
public void startGame() {
placeShips();
printfield();
}
private void placeShips() {
int [] shiporder ={2,2,2,2,3,3,3,4,4,5};
for(int j = 0; j < shiporder.length; j++){
int n = (int)(Math.random()*10);
int b = shiporder[n];
shiporder[n] = shiporder[j];
shiporder[j] = b;
}
int [] randomarray ={0,1,2,3,4,5,6,7,8,9};
for(int j = 0; j < randomarray.length; j++){
int w = (int)(Math.random()*10);
int g = randomarray[w];
randomarray[w] = randomarray[j];
randomarray[j] = g;
}
for(int j = 0; j < shiporder.length; j++){
int ship = shiporder[j];
int e = (int)(Math.random()*2);
if ( e == 0 && (hajotVizszintesre( randomarray, ship) ||hajotFuggolegesre( randomarray, ship ) ));
if ( e == 1 && ( hajotFuggolegesre( randomarray, ship) || hajotVizszintesre( randomarray, ship ) ));
}
}
public boolean hajotSorra(int x, int[] arr, int size){
boolean shipreadyleft = false;
boolean shipreadyright = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( ships[x][j] || ships[ Math.max(0,x-1)][j] || ships[ Math.min(9,x+1)][j] ){
if (point - j >= 2) shipreadyleft =true;
break;
}
if( !ships[x][0] && !ships[ Math.max(0,x-1)][0] && !ships[ Math.min(9,x+1)][0] ) shipreadyleft =true;
}
if (shipreadyleft){
for( int j = point; j < ships.length; j++){
if( ships[x][j] || ships[ Math.max(0,x-1)][j] || ships[ Math.min(9,x+1)][j]){
if (j - point >= size + 1 ) shipreadyright =true;
break;
}
if( !ships[x][ships.length-1] && !ships[ Math.max(0,x-1)][ships.length-1] && !ships[ Math.min(9,x+1)][ships.length-1] && ships.length - 1 - point >= size + 1 ) shipreadyright =true;
}
}
if ( shipreadyright ){
for( int j = point; j - point + 1 <= size; j++){
ships[x][j] = true;
}
}
if ( shipreadyright && shipreadyleft) break;
}
return shipreadyright && shipreadyleft;
}
public boolean hajotOszlopra(int y, int[] arr, int size){
boolean shipreadyup = false;
boolean shipreadydown = false;
for( int k = 0; k < arr.length; k++){
int point = arr[k];
for( int j = point; j >= 0; j--){
if( ships[j][y] || ships[j][ Math.max(0,y-1)] || ships[j][Math.min(9,y+1)] ){
if (point - j >= 2) shipreadyup =true;
break;
}
if( !ships[0][y] && !ships[0][ Math.max(0,y-1)] && !ships[0][Math.min(9,y+1)] ) shipreadyup =true;
}
if (shipreadyup){
for( int j = point; j < ships.length; j++){
if( ships[j][y] || ships[j][ Math.max(0,y-1)] || ships[j][Math.min(9,y+1)]){
if (j - point >= size + 1 ) shipreadydown =true;
break;
}
if( !ships[ships.length-1][y] && !ships[ships.length-1][ Math.max(0,y-1)] && !ships[ships.length-1][Math.min(9,y+1)] && ships.length - 1 - point >= size + 1 ) shipreadydown =true;
}
}
if ( shipreadydown ){
for( int j = point; j - point + 1 <= size; j++){
ships[j][y] = true;
}
}
if ( shipreadydown && shipreadyup ) break;
}
return shipreadydown && shipreadyup;
}
public boolean hajotVizszintesre(int[] arr, int size){
for( int k = 0; k < arr.length; k++){
int p1 = arr[k];
if ( hajotSorra(p1, arr, size)) return true;
}
return false;
}
public boolean hajotFuggolegesre(int[] arr, int size){
for( int k = 0; k < arr.length; k++){
int p2 = arr[k];
if ( hajotOszlopra(p2, arr, size )) return true;
}
return false;
}
public void printfield(){
for(int i = 0; i < ships.length; i++){
for(int j = 0; j < ships[i].length; j++){
if (ships[i][j])
System.out.print("H");
else
System.out.print("-");
}
System.out.println();
}
}
}itt a teszt hozza:
public class Jatek {
public static void main(String[] args){
int numRows = 10;
int numCols = 10;
torpedo bl = new torpedo (numRows, numCols);
bl.startGame();
}
} -
Szmeby
tag
Thx mint mindig.
Megcseréltem az If-eknél a sorrendet és most működik....
if (row == arr.length -1 || row == 0 || column == arr[row].length -1 || column == 0)
return true;
else if (arr[row-1][column] < x && flows(row-1,column, arr))
return true;
else if (arr[row+1][column] < x && flows(row+1,column, arr))
return true;
else if (arr[row][column-1] < x && flows(row,column-1, arr))
return true;
else
return (arr[row][column+1] < x && flows(row,column+1, arr));Deeee, ezt megint nem teljesen értem. Ok gondolom ha az első értek hamis, akkor eleve be sem kéri a 2. elemet. De miért nem megy úgy, ha előszór a rekurzív képletet hívom meg, ha hamis, akkor lep tovább a következö if-re?
Szuper.
Jól gondolod, az && meg a || shortcut operátornak is hívja magát, ha a feltétel eleje önmagában is meghatározza a feltétel kimenetelét a többi része már fel sem hívódik."De miért nem megy úgy, ha előszór a rekurzív képletet hívom meg ..."
Azért mert a rekurzív hívásnak le kell futnia ahhoz, hogy a feltételben ki lehessen értékelni. De nem fut le. Belemegy a metódusba újra új paraméterekkel, majd azon belül is újra megint új paraméterekkel, és így tovább. A végtelen ciklus miatt csak befelé megy, sose jön ki onnan. Valaminek terminálnia kell, csak akkor jut vissza, akkor tudja azt mondani, hogy true vagy false, az if-ben akkor ki tud értékelődni, és lefutna a programod.
Nézd át újra a rekurzióról tanultakat. Vagy tényleg tegyél bele egy breakpointot, és - ha Eclipse-et használsz - nyomogasd az F5-öt a flow hívásnál. Ezzel belelép... megnézheted, miben változtak a paraméterek és hogy a hívás meddig jut el a metódusban, mielőtt újra ráhívna saját magára, F5. Nézd közben a stack-et is, minden egyes rekurzív hívásnál egy új sorral bővül.
Ha már érted, vedd ki a breakpointot és F8-cal engedd el, hadd teljesítse be a végzetét.
-
Szmeby
tag
Sziasztok!
Egy rekurzív képlet kapcsán kérlek segítsetek.
Röviden: Van egy 2D-s tömbből álló 5x5 mátrixom véletlen értékekkel. Minden mezőből indulva meg kell vizsgálni, hogy kisebb értékekkel rendelkező szomszédos elemek menten (föl, le, balra, le) el lehet-e jutni a mátrix széléig. Fontos, hogy rekurzív képlettel kell megoldani Egy irányba meg tudtam oldani. Most a 9. és 11. valamint 13. és a 16.sorok összeakadnak.
Itt a drágám:
public class water{
public static boolean flows(int row, int column, int arr [][]){
int x = arr[row][column];
if (row ==arr.length -1 || row == 0 || column == arr[row].length -1 || column == 0)
return true;
else if (flows(row-1,column, arr) && arr[row-1][column] < x)
return true;
else if (flows(row+1,column, arr) && arr[row+1][column] < x)
return true;
else if (flows(row,column-1, arr) && arr[row][column-1] < x)
return true;
else
return (flows(row,column+1, arr) && arr[row][column+1] < x);
}
public static void main(String[] args){
int arr[][] = new int [5][5];
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print( (arr[i][j]= (int) (Math.random()*90)+10) + " ");
}
System.out.println();
}
System.out.println();
for(int i = 0; i <arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
if (flows(i,j, arr))
System.out.print("-");
else
System.out.print("W");
}
System.out.println();
}
}
}Hali,
mondjuk én első körben nem egyből egy random mátrixszal indítanék, hanem egy kicsit ellenőrzöttebb körülmények között tesztelném a cuccot. Pl. egy ilyennel:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1És akkor debug módban szépen lépkedve kiderítheted, hogy az a baj, hogy először mindig felfelé próbálkozol kijutni, majd ha nem megy, akkor lefelé. Csakhogy a próbálkozásod előtt nem csekkolod, hogy egyáltalán érdemes-e (<x). Mindenképp megpróbálod, így visszajutunk egy korábbi állapotba, ahonnan nem sikerült felfelé kijutni, így azt megpróbálni sem lenne érdemes, de ő csakazértis újra felfelé próbál. Nem tud, ezért megint lefelé indul el. A lefele ágban először újra felfelé indulna, és... gondolom érted, hogy ez a végtelenségig tart, ide-oda pingpongozik a két sor egymással.
Egy ilyen térképpel például szépen működik a progi, mert mindig csak felfelé kell másznia:
1 1 1 1 1
1 2 2 2 1
1 3 3 3 1
1 4 4 4 1
1 5 5 5 1Rekurzív hívásnál nagyon fontos a sorrend, amint tudod, terminálni kell a folyamatot. Érdemes először ellenőrizni, hogy a szomszédos szám valóban jó irány-e, és csak akkor ráhívni rekurzívan, ha tényleg van esély a kijutásra.
----
Apró adalék, hogy egy kis emlékezet bevezetésével, drasztikusan gyorsítható a program. Ugyanis ha számon tartod (pl. egy kimeneti mátrixban), hogy adott cellából sikerült-e korábban kijutni, akkor nem kell újra és újra végigjátszani a teljes útvonal bejárást. -
Szmeby
tag
@ disy68 és Szemby köszi!
Most működik, de azért nem minden kristálytiszta.
Meg egyszer pls itt mit is csinálunk?
public boolean equals(Object obj{
PolyLine other= (PolyLine) obj;
return points.equals(other.points);
}főleg ezt nem értem: other.points
Objectet becastoljuk PolyLine-ra, majd azt visszacastoljuk Arreylistre, aztán az equals ekkor a beépített metódus a két arraylist miatt?
Nem egészen.
Van 2 PolyLine objektumod, amit a Bsp10-ben hozol létre polyLine és polyLine2 néven.
Fogod a polyLine nevűt, és ráhívsz az equals metódusára, paraméterként pedig átadod ugye a polyLine2-t.A történések ezután az equals-on belül zajlanak tovább. A korábban polyLine-nak nevezett objektumot az equals-ban a this kulcsszóval érheted el (amit többnyire nem kötelező kiírni, névütközés esetén viszont kénytelen az ember... na mindegy), míg a polyLine2 most már obj néven érhető el. A csavar ott van, hogy az equals szignatúrája csak Object típusú paramétert enged meg, ezért az obj paramétert kénytelen vagy Object típussal definiálni, erről viszont a java már nem tudja, hogy az valójában egy PolyLine objektum, így a spéci metódusaira sem tud ráhívni, és a field-jeit sem látja.
Úgyhogy castolunk, megmondjuk őnagyságának, hogy ez bizony egy PolyLine:
PolyLine other = (PolyLine) obj;
Megjegyzem, most ez így működik, de ha megpróbálsz egy nem PolyLine objektumot betolni, szétszakad az egész, tehát érdemes az equals-ban előbb megbizonyosodni arról, hogy valóban PolyLine-e (getClass() metódus felhívásával, instanceof-fal).Ezekután az other változóról már tudjauk, hogy PolyLine, elérjük minden metódusát és field-jét, például a hasában lévő points listát is. Egy Object esetén ezt nem tudod megtenni. És ezt a listát össze tudjuk hasonlítani a this objektumunk points listájával.
return this.points.equals(other.points);
Rövidebben:return points.equals(other.points);Tehát listát hasonlítunk listával, ezért működik.
Ez nem castolás, csak meghivatkozzuk az objektum egy field-jét.
Castolásnál a változónév elé zárójelben megadjuk azt a típust, amire castolni akarunk, és ezzel aztán azt kezdünk, amit akarunk. Az "other.points" nem tartalmaz semmilyen zárójelet meg típust, ez csak ráhív a points nevű mezőre az other objektumban.A castolás elhiteti a jvm-mel, hogy az adott objektum valójában egy másik típusú objektum. Itt nem változtatunk a típuson, a this és az other továbbra is PolyLine típusú, és mindkettő hasában van 1-1 lista (points néven), amit felhasználunk az egyezőség megállapításához. A points.equals() tehát az ArrayList-en található equals metódus.
Ha a this-t és az other-t hasonlítanád itt össze egymással, az ugyanabba az equals metódusba hívna bele (rekurzió) újra és újra, amiben eleve vagy, és addig pörögne, amíg el nem fogy a stack, majd lehal az egész. Próbáld ki.

És kérdezz bátran.
-
disy68
aktív tag
Sziasztok!
Ismét segítségeteket kérném.
Van egy pont osztályom:
public class Point{
private int x;
private int y;
public Point(int x, int y){
this.x = x;
this.y= y;
}
public int getX(){
return this.x;
}
public int getY(){
return this.y;
}
public boolean equals(Object other){
Point otherPoint = (Point) other;
return getX() == otherPoint.getX() && getY() == otherPoint.getY();
}
public double getDistance(Point other){
return Math.sqrt( Math.pow(getX() - other.getX(), 2) + Math.pow(getY() - other.getY(), 2));
}
public String toString(){
return "(" + getX() +", " + getY() + ")";
}
}Van egy pontokból álló vonallánc osztályom:
import java.util.ArrayList;
public class PolyLine{
private ArrayList<Point> points = new ArrayList<Point>();
public PolyLine(ArrayList<Point> points){
this.points = points;
for (int i = 0; i < points.size()-1; i++){
if (!add(points.get(i))){
points.remove(i);
i--;
}
}
}
public ArrayList<Point> getPoints(){
return points;
}
public boolean equals(Object other){
return points.equals(other);
}
public boolean add(Point p){
int pos = points.indexOf(p);
return pos != -1 && !points.get(pos+1).equals(p);
}
public String toString(){
String a = "[";
String b = "" ;
for (int i = 0; i < points.size()-1; i++){
b = b + points.get(i).toString()+ ", ";
}
String c = points.get(points.size()-1).toString() + "]";
return a + b + c;
}
}A baj az, hogy a két vonallánc összehasonlításánál az equals false-t dob, amikor azok megegyeznek. Az ismétlődések nem számítanak, azt a vonallánc constructorja kiszedi. A fejlécek fixek, azokat nem lehet változtatni. A sejtesem az, hogy point osztály equals metódusával számol és nem a beépített arraylistessel.
Itt hozza a teszt:
import java.util.ArrayList;
public class Bsp10{
public static void main(String[] args){
ArrayList<Point> points = new ArrayList<>();
points.add(new Point(292, -457));
points.add(new Point(292, -457));
points.add(new Point(292, -457));
points.add(new Point(17, -277));
points.add(new Point(-942, -103));
points.add(new Point(-557, -18));
PolyLine polyLine = new PolyLine(points);
ArrayList<Point> points2 = new ArrayList<>();
points2.add(new Point(292, -457));
points2.add(new Point(17, -277));
points2.add(new Point(-942, -103));
points2.add(new Point(-557, -18));
PolyLine polyLine2 = new PolyLine(points2);
System.out.println(polyLine);
System.out.println(polyLine2);
System.out.println(polyLine.equals(polyLine2));
}
}Köszi előre is!
Az equals függvényt hashCode nélkül nem írjuk felül (és amikor felülírjuk használjuk az @Override annotációt)! Mindkét függvény az Object osztályból jön, ami minden osztály őse. Olvasnivaló a témához.
-
Szmeby
tag
Sziasztok!
Ismét segítségeteket kérném.
Van egy pont osztályom:
public class Point{
private int x;
private int y;
public Point(int x, int y){
this.x = x;
this.y= y;
}
public int getX(){
return this.x;
}
public int getY(){
return this.y;
}
public boolean equals(Object other){
Point otherPoint = (Point) other;
return getX() == otherPoint.getX() && getY() == otherPoint.getY();
}
public double getDistance(Point other){
return Math.sqrt( Math.pow(getX() - other.getX(), 2) + Math.pow(getY() - other.getY(), 2));
}
public String toString(){
return "(" + getX() +", " + getY() + ")";
}
}Van egy pontokból álló vonallánc osztályom:
import java.util.ArrayList;
public class PolyLine{
private ArrayList<Point> points = new ArrayList<Point>();
public PolyLine(ArrayList<Point> points){
this.points = points;
for (int i = 0; i < points.size()-1; i++){
if (!add(points.get(i))){
points.remove(i);
i--;
}
}
}
public ArrayList<Point> getPoints(){
return points;
}
public boolean equals(Object other){
return points.equals(other);
}
public boolean add(Point p){
int pos = points.indexOf(p);
return pos != -1 && !points.get(pos+1).equals(p);
}
public String toString(){
String a = "[";
String b = "" ;
for (int i = 0; i < points.size()-1; i++){
b = b + points.get(i).toString()+ ", ";
}
String c = points.get(points.size()-1).toString() + "]";
return a + b + c;
}
}A baj az, hogy a két vonallánc összehasonlításánál az equals false-t dob, amikor azok megegyeznek. Az ismétlődések nem számítanak, azt a vonallánc constructorja kiszedi. A fejlécek fixek, azokat nem lehet változtatni. A sejtesem az, hogy point osztály equals metódusával számol és nem a beépített arraylistessel.
Itt hozza a teszt:
import java.util.ArrayList;
public class Bsp10{
public static void main(String[] args){
ArrayList<Point> points = new ArrayList<>();
points.add(new Point(292, -457));
points.add(new Point(292, -457));
points.add(new Point(292, -457));
points.add(new Point(17, -277));
points.add(new Point(-942, -103));
points.add(new Point(-557, -18));
PolyLine polyLine = new PolyLine(points);
ArrayList<Point> points2 = new ArrayList<>();
points2.add(new Point(292, -457));
points2.add(new Point(17, -277));
points2.add(new Point(-942, -103));
points2.add(new Point(-557, -18));
PolyLine polyLine2 = new PolyLine(points2);
System.out.println(polyLine);
System.out.println(polyLine2);
System.out.println(polyLine.equals(polyLine2));
}
}Köszi előre is!
Ezért ne kövesd el te azt a hibát, amit a java megalkotói, hogy túl általános típust használsz.

Jó, tudom, csak kompatibilitás, de akkoris.Szóval a probléma a PolyLine.equals-ban van. Mivel a szignatúrája szerint Objectet vár, az ember bármit beadhat. És hidd el, be is fog. Amin aztán az egész cucc megfekszik (pl. ClassCastException-nel), ha nem figyelsz. Rosszabb esetben - mint most is - működik tovább hibásan.
Javaslom, minden equals metódusodban ellenőrizni a bejövő paraméter típusát. Ha nem jó típus, akkor false, ha jó típus, akkor pedig tessék castolni, és aztán hasonlítgatni. Könnyebben kibukik, hogy a beadott PolyLine nem is ArrayList, amivel hasonlítani akarod.
Egyébként az equals, hashcode metódusokat egy IDE szépen ki is generálja neked, van rá menüpont.Szóval listát a listával:
public boolean equals(Object obj){
if (obj == this) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PolyLine other = (PolyLine) obj;
return points.equals(other.points);
}Ha nem kellenek az ismétlődések, miért nem egy rendezett Setet használsz erre a célra? LinkedHashSet, vagy valami ilyesmi. Ő magától megcsinálja.
Pár megjegyzés:
- Osztályon belül felesleges gettereket használnod, simán lehet hivatkozni a field-ekre, pl.:return Math.sqrt(Math.pow(this.x - other.x, 2) + Math.pow(this.y - other.y, 2));- Ha az objektum állapota nem változhat, akkor érdemes a field-eket final-ra állítani, így még véletlenül sem fogod tudni tönkretenni az objektumaidat. Továbbá egy ilyen tipikus value object esetén én még a getterek elhagyását is megkockáztatnám, valahogy így:
public class Point{
public final int x;
public final int y;
public Point(int x, int y){
this.x = x;
this.y= y;
}
public boolean equals(Object other){
// ...
}
public double getDistance(Point other){
// ...
}
public String toString(){
// ...
}
}- Ne félj interfészt használni, ahol lehet, könnyebben cserélgetheted majd mögötte az implementációt. Ha nem akarod cserélgetni, akkor sem árt, mert idővel rááll a kezed, és nem kell folyton törnöd az APIt egy kis módosítás miatt.
Erre gondolok:private ArrayList<Point> points = new ArrayList<Point>();
// helyett
private List<Point> points = new ArrayList<Point>();
// esetleg (attól függ, milyen funkcionalitást vársz el tőle, legyen-e rendezett, stb)
private Collection<Point> points = new ArrayList<Point>();- Ciklusban Stringeket konkatenálni + jellel nem szép dolog, brutálisan pazarló. Minden egyes konkatenáció egy újabb és egy újabb Stringet hoz létre, amit aztán a következő körben el is dob, mert csak átmenetileg volt rá szükség. StringBuilder javallott és annak append metódusa. Vaaagy használod a listák toString metódusát, mert van.

-
#74220800
törölt tag
Sziasztok!
Ismét segítségeteket kérném.
Van egy pont osztályom:
public class Point{
private int x;
private int y;
public Point(int x, int y){
this.x = x;
this.y= y;
}
public int getX(){
return this.x;
}
public int getY(){
return this.y;
}
public boolean equals(Object other){
Point otherPoint = (Point) other;
return getX() == otherPoint.getX() && getY() == otherPoint.getY();
}
public double getDistance(Point other){
return Math.sqrt( Math.pow(getX() - other.getX(), 2) + Math.pow(getY() - other.getY(), 2));
}
public String toString(){
return "(" + getX() +", " + getY() + ")";
}
}Van egy pontokból álló vonallánc osztályom:
import java.util.ArrayList;
public class PolyLine{
private ArrayList<Point> points = new ArrayList<Point>();
public PolyLine(ArrayList<Point> points){
this.points = points;
for (int i = 0; i < points.size()-1; i++){
if (!add(points.get(i))){
points.remove(i);
i--;
}
}
}
public ArrayList<Point> getPoints(){
return points;
}
public boolean equals(Object other){
return points.equals(other);
}
public boolean add(Point p){
int pos = points.indexOf(p);
return pos != -1 && !points.get(pos+1).equals(p);
}
public String toString(){
String a = "[";
String b = "" ;
for (int i = 0; i < points.size()-1; i++){
b = b + points.get(i).toString()+ ", ";
}
String c = points.get(points.size()-1).toString() + "]";
return a + b + c;
}
}A baj az, hogy a két vonallánc összehasonlításánál az equals false-t dob, amikor azok megegyeznek. Az ismétlődések nem számítanak, azt a vonallánc constructorja kiszedi. A fejlécek fixek, azokat nem lehet változtatni. A sejtesem az, hogy point osztály equals metódusával számol és nem a beépített arraylistessel.
Itt hozza a teszt:
import java.util.ArrayList;
public class Bsp10{
public static void main(String[] args){
ArrayList<Point> points = new ArrayList<>();
points.add(new Point(292, -457));
points.add(new Point(292, -457));
points.add(new Point(292, -457));
points.add(new Point(17, -277));
points.add(new Point(-942, -103));
points.add(new Point(-557, -18));
PolyLine polyLine = new PolyLine(points);
ArrayList<Point> points2 = new ArrayList<>();
points2.add(new Point(292, -457));
points2.add(new Point(17, -277));
points2.add(new Point(-942, -103));
points2.add(new Point(-557, -18));
PolyLine polyLine2 = new PolyLine(points2);
System.out.println(polyLine);
System.out.println(polyLine2);
System.out.println(polyLine.equals(polyLine2));
}
}Köszi előre is!
Továbbá próbáltam volna for ciklussal elemenként összehasonlítani, de azt meg nem tudtam megoldani, mert az arraylistes metódusokat nem találta Objecktes változóra. Próbáltam átalakítani is mint a point-nal, de azt sem ette meg.
-
Atapi
senior tag
Hi!
Segítségeteket szeretnem kerni. Ismét egy rookie feladattal fárasztanálak benneteket
. Osztálytömb lenne a téma, kicsit belezavarodtam.
A lényeg röviden. Egy külön osztályban le kellett kepézni az éttermeket nevük, és kapacitásuk (tömbben asztalonként) szerint. Továbbá egy metódussal összesíteni az elérhető helyek számat, valamint egy másikkal stringbe rakni az eredményt.Nálam eddig ez így nézne ki:
public class Restaurant{
private int[] a;
private String e;
public Restaurant (String name, int[] seats){
e = name;
a = seats;
}
public int getTotalSeats (){
int x = 0;
for (int i = 0, i < a.length, i++){
x = x + a[i];
}
return x;
}
public String toString (){
String text;
text = e + ": " + getTotalSeats() + " Places";
return text;
}
}A követekéző lepésben a nyolcas sort metódusával összkapacitás alapján, csökkenő sorrendbe kéne őket rendezni.
Ha minden passzolna, akkor a feladat által megadott főmetódus kidobna az eredményt.
public class nyolcas{
public static void sort (Restaurant[] restaurants){
int max, w;
for (int i = 0; i < restaurants.length - 1; i++){
max = i;
for (int j = i+1; j < restaurants.length; j++){
if (restaurant[j].getTotalSeats() > restaurant[max].getTotalSeats())
max = j;
}
w = restaurants[max];
restaurants[max] = restaurants[i];
restaurants[i]= w;
}
}
public static void main(String[] args){
Restaurant r1 = new Restaurant ("A", new int[] {4, 10, 5, 6, 4});
Restaurant[] restaurants =
{ r1,
new Restaurant ("B", new int[] {5, 3, 1}),
new Restaurant ("C", new int[] {6, 4, 2}),
new Restaurant ("D", new int[] {7, 5, 3})
};
sort (restaurants);
for (Restaurant r: restaurants)
System.out.println (r);
}
}Sajnos nem eszi meg, pls help.
én három hibát találtam:
- egy for ciklusban pontosvessző helyett sima vesszőt használtál
- a restaurants tömbneved végéről több helyen lehagytad a záró s-t
- w nem int tipusu, hanem Restaurant -
#74220800
törölt tag
-
skoda12
aktív tag
Szerk: Semmi, benéztem, megzavart a max elnevezés használata nem maximális kezdőelemre ...
Mindenesetre a hibákat bedobhatnád egy hozzászólásban, függettlenól attól, hogy fordítási vagy futtatási háról van szó.
-
mobal
nagyúr
-
Aethelstone
addikt
Hi!
Segítségeteket szeretnem kerni. Ismét egy rookie feladattal fárasztanálak benneteket
. Osztálytömb lenne a téma, kicsit belezavarodtam.
A lényeg röviden. Egy külön osztályban le kellett kepézni az éttermeket nevük, és kapacitásuk (tömbben asztalonként) szerint. Továbbá egy metódussal összesíteni az elérhető helyek számat, valamint egy másikkal stringbe rakni az eredményt.Nálam eddig ez így nézne ki:
public class Restaurant{
private int[] a;
private String e;
public Restaurant (String name, int[] seats){
e = name;
a = seats;
}
public int getTotalSeats (){
int x = 0;
for (int i = 0, i < a.length, i++){
x = x + a[i];
}
return x;
}
public String toString (){
String text;
text = e + ": " + getTotalSeats() + " Places";
return text;
}
}A követekéző lepésben a nyolcas sort metódusával összkapacitás alapján, csökkenő sorrendbe kéne őket rendezni.
Ha minden passzolna, akkor a feladat által megadott főmetódus kidobna az eredményt.
public class nyolcas{
public static void sort (Restaurant[] restaurants){
int max, w;
for (int i = 0; i < restaurants.length - 1; i++){
max = i;
for (int j = i+1; j < restaurants.length; j++){
if (restaurant[j].getTotalSeats() > restaurant[max].getTotalSeats())
max = j;
}
w = restaurants[max];
restaurants[max] = restaurants[i];
restaurants[i]= w;
}
}
public static void main(String[] args){
Restaurant r1 = new Restaurant ("A", new int[] {4, 10, 5, 6, 4});
Restaurant[] restaurants =
{ r1,
new Restaurant ("B", new int[] {5, 3, 1}),
new Restaurant ("C", new int[] {6, 4, 2}),
new Restaurant ("D", new int[] {7, 5, 3})
};
sort (restaurants);
for (Restaurant r: restaurants)
System.out.println (r);
}
}Sajnos nem eszi meg, pls help.
Sortolást List-el és Comparatorral.
-
Szmeby
tag
Bocs előzőt kérlek töröljetek!
Tehát egyszerűen akkor?:
public static int printFirstPrimes(boolean[] firstPrimes){
int j=0;
for (int i = 0; i < firstPrimes.length; i++) {
if (firstPrimes[i]==true){
j++;
System.out.print(i + " ");
}
}
System.out.print(j);
return j;
}A feladat kiírás szerint pontosan ezzel a metódussal "public static int printFirstPrimes(boolean[] firstPrimes)" kell a prímszámokat megszámolni, ill. kiadni. A bajom az hogy, elméletileg ez egy int értékel tér vissza, így nem tudom hogy lehet-e kiirtásra is használni.
Igen, lehet. Bármit bárhol kiírhatsz a konzolra. Még a metódus neve is azt sugallja, hogy írni fog a konzolra. Meg ez csak egy vacak iskolai feladat. Ha így kérik, hát így kérik. Adj neki!
Az, hogy mivel tér vissza, int, void, kiskutya, ettől teljesen független. Nem fáj neki az a print.Megjegyzem, kicsit zavaró lehet az utolsó szám (j), mivel az nem egy prím, hanem egy darabszám lesz. A kiírásnál én azt jobban elkülöníteném. Akár mondjuk egy külön sorba írva (println), vagy valami extra felvezető szöveggel. Sőt, mivel a metódus ezt a számot ki is adja magából, talán a hívó megoldja a kiírást, nem? Persze ha a feladat kifejezetten azt kéri, hogy a prímek után írd, akkor nincs mese.

Továbbá egy apróság:
Ha olyat látsz, hogyif (valami == true) {
akkor az pontosan ugyanazt jelenti, hogyif (valami) {
mivel a 'valami' egy boolean, és az utóbbi a szebb megoldás.Ugyanez tagadással is:
if (valami == false) {
szépenif (!valami) {A 'valami' tehát egy boolean változó neve, és ezeket úgy szokás elnevezni, hogy egy eldöntendő (igen/nem) kérdést takarjon. Például: isValid vagy hasValue, stb, akkor a teljes feltétellel kiolvasva értelmes mondatot kapsz: if (isValid), vagy if (!hasValue). Jobb nem lesz tőle a kód csak szebb. És ha az olvasható változatot szokod meg, az csak a javadra válik később. Meg a leendő kollégáidnak is több hajszála marad.

-
Chesterfield
őstag
Bocs előzőt kérlek töröljetek!
Tehát egyszerűen akkor?:
public static int printFirstPrimes(boolean[] firstPrimes){
int j=0;
for (int i = 0; i < firstPrimes.length; i++) {
if (firstPrimes[i]==true){
j++;
System.out.print(i + " ");
}
}
System.out.print(j);
return j;
}A feladat kiírás szerint pontosan ezzel a metódussal "public static int printFirstPrimes(boolean[] firstPrimes)" kell a prímszámokat megszámolni, ill. kiadni. A bajom az hogy, elméletileg ez egy int értékel tér vissza, így nem tudom hogy lehet-e kiirtásra is használni.
Ha tényleg így kell megoldani, akkor ez végülis működik, amit írtál az utolsóban.
Mivel ez csak a prímek darabszámával tér vissza, így ha tényleg ezzel a metódussal kell kiírni is érték szerint a prímeket, akkor csak így tudod.
-
#74220800
törölt tag
Bocs előzőt kérlek töröljetek!
Tehát egyszerűen akkor?:
public static int printFirstPrimes(boolean[] firstPrimes){
int j=0;
for (int i = 0; i < firstPrimes.length; i++) {
if (firstPrimes[i]==true){
j++;
System.out.print(i + " ");
}
}
System.out.print(j);
return j;
}A feladat kiírás szerint pontosan ezzel a metódussal "public static int printFirstPrimes(boolean[] firstPrimes)" kell a prímszámokat megszámolni, ill. kiadni. A bajom az hogy, elméletileg ez egy int értékel tér vissza, így nem tudom hogy lehet-e kiirtásra is használni.
-
ToMmY_hun
senior tag
Hi!
Házi feladat része lenne.
Röviden:
Van egy "public static boolean[] firstPrimes(int n)" metódusom amely visszaad egy array-t, hogy [0 n] melyik prímszám. pl: {false, false, true, true, false, true, false, true}.
Köv lepésben a "public static int printFirstPrimes(boolean[] firstPrimes)" metódussal az előző metódus segítségével meg kéne számolni hány prímszám, melyek ezek és ki is kéne ezeket az eredményeket íratni.
Elképzelésem van, persze nyilván sz@r, mint mindig
:public static int printFirstPrimes(boolean[] firstPrimes){
int j=0;
for (int i = 0; i < firstPrimes.length; i++) {
if (firstPrimes==true)
j++;
}
int[] b = new int[j];
for (int w = 0; w < b.length; w++){
if (firstPrimes[w]==true){
b[w]=w;
System.out.print(b[w] + " ");
}
}
System.out.print(j);
return j;
}
Zavar hogy int-es a metódus és nem void-os, és így nem tudom hogy lehet e vele egyáltalán kiíratni az eredményt.
1. Formázd a kódot, ez így nagyon hányingerkeltő. Van itt is programkód kompatibilis tag, de javaslom a pastebin vagy egyéb weboldal használatát.
2. Le kell mentened a prím ellenőrzés eredményét? Ezt egy külön tömbben kell megtenned? Ha ezt explicit módon nem említi a feladat, akkor a megközelítésed eléggé erőforrás pazarló. (amennyiben kéri és ezt ilyen módon teszi, akkor szólj az oktatónak hogy ne tanítson ilyen butaságokra)
3. Használj ranged for ciklust, ha nem kell az indexet felhasználnod.
4. A sima array helyett használj dinamikus tömböt, például ArrayList-et, és megspórolhatod vele a második for ciklust.
5. Több értéket akarsz kiírni, miért egy int-tel térsz vissza? Számomra eléggé katyvasz a feladat leírás. Le tudod írni az eredetit?
Egyébként a tömb indexelést alapból felejtsd el. Akkor kell használni, ha nincs más megoldás, minden egyéb esetben kerülendő.
-
WonderCSabo
félisten
-
skoda12
aktív tag
Nem. Hiba esetén egy exception dobódik általában, amit vagy lekezelsz vagy nem és akkor leáll az alkalmazásod jó eséllyel. Pl ha a függvényed egy adott x-re 0-val osztana, az biztos exceptionnel végződik.
-
fatal`
titán
Ezt doubleval nem fogod tudni megcsinálni, nem elég pontos.
Egyébként (tömb helyett listával):
List<int> x = new ArrayList<int>();
for (double i = 1.0; i < r; i += 0.1) {
x.add(i);
}Szerk.: Bocs, elfelejtettem lapozni, azt hittem utolsó hsz

-
bucsupeti
senior tag
Szerintem:
double[] xo;
int i=0;
while (l<r){
l=l+0.1
xo[i]=l;
i++;
} -
axioma
veterán
-
axioma
veterán
A tomb valtozojat deklaraltad, de a tombot nem hoztad letre. Igy aztan az elemeire se tudsz hivatkozni (se jobbertekkent, se balertekkent amugy).
double[] xo = new double[(r-l)*10+1];
Muszaj igy, mert ott egesz tipusu kifejezes kell, a 10-zel szorzassal nem lepsz ki belole, ellenben a 0.1-gyel osztassal mar igen...
Ja es ugyel<=rellenorzese utan csak mindez, ha nem akarsz meglepeteseket. -
Ursache
senior tag
-
floatr
veterán
A titok nyitja az, hogy a műveleti sorrend szerint végzi el a "típuskonverziót" is. Először összeadja a Stringet és a számot, aminek az eredménye String, amihez hozzáadja a következőt is.
-
Aethelstone
addikt
double osszeg = Math.abs(a)+Math.abs(b);
System.out.println("Összeg:"+osszeg);vagy
System.out.println("Összeg:"+(Math.abs(a)+Math.abs(b)));
Új hozzászólás Aktív témák
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Lakáshitel, lakásvásárlás
- Gurulunk, WAZE?!
- Yettel topik
- Hálózati / IP kamera
- Archttila: SMART tesztelés automatizálva: smartctl poller script Zsh-ban, RPi-re
- Gaming notebook topik
- Végre feketében pózol a Noctua legkomolyabb 120 mm-es ventilátora
- Milyen okostelefont vegyek?
- Építő/felújító topik
- Mi csak nyerhetünk a fokozódó űrinternet versenyben
- További aktív témák...
- Hihetetlen Gaming PC brutális specifikációkkal! A dán Topdata.dk IT-cég által összerakva
- 2.5" 100% noti HDD-k Western Digital, Seagate 320Gb (3k) +1Tb (15k) van 1db SSHD is (15k)
- Lenovo P16s gen2 16" //Core i7 1360P // Nvidia RTX A500 4GB GDDR6 // 16Gb /512GB SSD/ gyári garancia
- Micron és Samsung 32GB ram 1 x 32GB 3200Mhz vagy 2 x 16GB 2666Mhz - több db elérhető
- Lenovo M720q Mini PC - Core i3 8100T vagy Core i5 8500T- 8GB vagy 16GB ram - 256/512GB SSD - több db
- Csak kipróbált!!!! Roborock Q10 VF+ robotporszívó, fekete
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- AKCIÓ! Lian Li Galahad II 360ARGB white bontattlan vízhűtés garanciával hibátlan működéssel
- Gamer PC-Számítógép! Csere-Beszámítás! Ryzen 5 5600XT / RTX 5060 / 16GB DDR4 / 1TB SSD!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest




