A feladat aminek a megoldását itt közzéteszem, itt található. A feladatot csak forráskódként teszem közzé, a project-nek itt nem látnám értelmét.
Természetesen számtalan más módon is meg lehetne oldani a feladatot, én a tanult eszközök és alap algoritmusok segítségével mutatom be a megoldásokat.
package webotlet_fajlkezeles5; import java.io.*; public class Webotlet_Fajlkezeles5 { public static void main( String[] args ) { RandomAccessFile raf; int [] tomb1 = null ; int [] tomb2 = null ; // adatok beolvasása két tömbbe try { String sor; raf = new RandomAccessFile( "szamok2oszlop.txt" , "r" ); int db = 0 ; for ( sor = raf.readLine(); sor != null ; sor = raf.readLine() ) { db++; } raf.seek( 0 ); tomb1 = new int [db]; tomb2 = new int [db]; String[] tmp = new String[ 2 ]; int idx = 0 ; for ( sor = raf.readLine(); sor != null ; sor = raf.readLine() ) { tmp = sor.split( ";" ); tomb1[idx] = Integer.parseInt( tmp[ 0 ] ); tomb2[idx] = Integer.parseInt( tmp[ 1 ] ); idx++; } raf.close(); } catch ( IOException e ) { System.out.println( "HIBA" ); } // Melyik tömbben nagyobb az elemek összege? int osszeg1 = 0 ; int osszeg2 = 0 ; for ( int i = 0 ; i < tomb1.length; i++ ) { osszeg1 += tomb1[i]; osszeg2 += tomb2[i]; } if ( osszeg1 > osszeg2 ) { System.out.println( "Az elso tomb elemeinek osszege nagyobb." ); } else if ( osszeg1 < osszeg2 ) { System.out.println( "A masodik tomb elemeinek osszege nagyobb." ); } else { System.out.println( "A ket tomb elemeinek osszege egyenlo." ); } // Melyik tömb tartalmaz több negatív számot? int negDb1 = 0 ; int negDb2 = 0 ; for ( int i = 0 ; i < tomb1.length; i++ ) { if ( tomb1[i] < 0 ) { negDb1++; } if ( tomb2[i] < 0 ) { negDb2++; } } if ( negDb1 > negDb2 ) { System.out.println( "Az elso tomb tartalmaz tobb " + "negativ szamot." ); } else if ( negDb1 < negDb2 ) { System.out.println( "A masodik tomb tartalmaz tobb " + "negativ szamot." ); } else { System.out.println( "A ket tombben ugyanannyi negativ " + "szam van." ); } // másik megoldás // egy számlálót növelek, ha az első tömbben negatív szám van // és csökkentem, ha a másodikban // a változó kiértékelését lásd a feltételeknél int negDb = 0 ; for ( int i = 0 ; i < tomb1.length; i++ ) { if ( tomb1[i] < 0 ) { negDb++; } if ( tomb2[i] < 0 ) { negDb--; } } if ( negDb > 0 ) { System.out.println( "Az elso tomb tartalmaz tobb " + "negativ szamot." ); } else if ( negDb < 0 ) { System.out.println( "A masodik tomb tartalmaz tobb " + "negativ szamot." ); } else { System.out.println( "A ket tombben ugyanannyi negativ " + "szam van." ); } // Van-e olyan szám, ami mindkét tömbben ugyanott található? boolean van = false ; for ( int i = 0 ; i < tomb1.length; i++ ) { if ( tomb1[i] == tomb2[i] ) { van = true ; break ; } } if ( van ) { System.out.println( "Van ilyen szam." ); } else { System.out.println( "Nincs ilyen szam." ); } // Hány esetben nagyobb a két tömb azonos helyen lévő elemeiből // az első tömbben lévő? int elsoNagyobb = 0 ; for ( int i = 0 ; i < tomb1.length; i++ ) { if ( tomb1[i] > tomb2[i] ) { elsoNagyobb++; } } System.out.println( elsoNagyobb+ " esetben nagyobb az " + "elso tomb azonos helyen levo eleme." ); // Melyik tömbben található a legnagyobb szám? int maxElem1 = tomb1[ 0 ]; int maxElem2 = tomb2[ 0 ]; for ( int i = 1 ; i < tomb1.length; i++ ) { if ( tomb1[i] > maxElem1 ) { maxElem1 = tomb1[i]; } if ( tomb2[i] > maxElem2 ) { maxElem2 = tomb2[i]; } } if ( maxElem1 > maxElem2 ) { System.out.println( "Az elso tombben talalhato a " + "legnagyobb szam." ); } else if ( maxElem1 < maxElem2 ) { System.out.println( "A masodik tombben talalhato a " + "legnagyobb szam." ); } else { System.out.println( "A ket tombben a legnagyobb " + "elem ugyanaz a szam." ); } // Helyezd el egy harmadik tömbben a két tömb elemeit úgy, // hogy a fájlban azonos sorban lévő elemek egymás után // legyenek! Első tömb 1. eleme, második tömb 1. eleme, // első tömb 2. eleme, stb. Írd ki az új tömböt a képernyőre! int [] tomb3 = new int [tomb1.length+tomb2.length]; int idx = 0 ; for ( int i = 0 ; i < tomb1.length; i++ ) { tomb3[idx] = tomb1[i]; idx++; tomb3[idx] = tomb2[i]; idx++; } System.out.println( "A ket tomb elemei osszefesulve:" ); for ( int i = 0 ; i < tomb3.length; i++) { System.out.print(tomb3[i]+ " " ); } System.out.println(); // Melyik tömbben található az a két szomszédos szám, // amelyeknek legnagyobb az összege? int max1 = tomb1[ 1 ] - tomb1[ 0 ]; int max2 = tomb2[ 1 ] - tomb2[ 0 ]; for ( int i = 0 ; i < tomb1.length- 1 ; i++ ) { if ( tomb1[i+ 1 ] - tomb1[i] > max1 ) { max1 = tomb1[i+ 1 ] - tomb1[i]; } if ( tomb2[i+ 1 ] - tomb2[i] > max1 ) { max2 = tomb2[i+ 1 ] - tomb2[i]; } } if ( max1 > max2 ) { System.out.println( "Az elso tombben talalhato a ket " + "legnagyobb osszegu szomszedos szam." ); } else if ( max1 < max2 ) { System.out.println( "A masodik tombben talalhato a " + "ket legnagyobb osszegu szomszedos szam." ); } else { System.out.println( "A ket tombben ugyanakkora a ket " + "legnagyobb osszegu szomszedos szam." ); } // Melyik az a legkisebb intervallum, amelyben a // két tömb elemei benne vannak? int minElem = tomb1[ 0 ]; int maxElem = tomb1[ 0 ]; for ( int i = 0 ; i < tomb1.length; i++ ) { if ( tomb1[i] > maxElem ) { maxElem = tomb1[i]; } if ( tomb2[i] > maxElem ) { maxElem = tomb2[i]; } if ( tomb1[i] < minElem ) { minElem = tomb1[i]; } if ( tomb2[i] < minElem ) { minElem = tomb2[i]; } } System.out.println( "A legkisebb intervallum, amiben " + "elfernek a ket tomb elemei: [" + minElem+ ";" +maxElem+ "]" ); // Válogasd ki egy negyedik tömbbe a két tömbben lévő // számokat úgy, hogy mindegyik szám csak egyszer szerepeljen! // olyan kivalogatas, ahol az uj vizsgalando elemet // mindig meg kell nezni, hogy benne van-e mar az eredmenytombben // mivel elore nem tudjuk, hogy hany elemet tudunk majd // kivalogatni, ezert abbol kell kiindulni, hogy az uj tomb // merete legrosszabb esetben minden elemet at kell rakni // (minden elem egyedi a ket tombre nezve) az eredmenytombben // mindig az idx4 jelenti a valodi elemek darabszamat, // nem a tomb4.length int [] tomb4 = new int [tomb1.length+tomb2.length]; int idx4 = 0 ; tomb4[idx4] = tomb1[ 0 ]; idx4++; for ( int i = 0 ; i < tomb1.length; i++ ) { int j = 0 ; while ( j < idx4 && tomb4[j] != tomb1[i] ) { j++; } if ( j == idx4 ) { tomb4[idx4] = tomb1[i]; idx4++; } j = 0 ; while ( j < idx4 && tomb4[j] != tomb2[i] ) { j++; } if ( j == idx4 ) { tomb4[idx4] = tomb2[i]; idx4++; } } System.out.print( "A 2 tomb kulonbozo elemei: " ); for ( int i = 0 ; i < idx4; i++ ) { System.out.print( tomb4[i]+ " " ); } System.out.println( ); // Melyik tömbben található több egyedi érték? // kivalogatom a ket tombot kulon-kulon egyedi // ertekeket tartalmazo tombokbe amelyikbe tobbet tudtam // kivalogatni, abban van tobb egyedi ertek int [] tomb1Egyedi = new int [tomb1.length]; int idxTomb1 = 0 ; tomb1Egyedi[idxTomb1] = tomb1[ 0 ]; idxTomb1++; for ( int i = 1 ; i < tomb1.length; i++ ) { int j = 0 ; while ( j < idxTomb1 && tomb1Egyedi[j] != tomb1[i] ) { j++; } if ( j == idxTomb1 ) { tomb1Egyedi[idxTomb1] = tomb1[i]; idxTomb1++; } } int [] tomb2Egyedi = new int [tomb2.length]; int idxTomb2 = 0 ; tomb2Egyedi[idxTomb2] = tomb1[ 0 ]; idxTomb2++; for ( int i = 1 ; i < tomb2.length; i++ ) { int j = 0 ; while ( j < idxTomb2 && tomb2Egyedi[j] != tomb2[i] ) { j++; } if ( j == idxTomb2 ) { tomb2Egyedi[idxTomb2] = tomb2[i]; idxTomb2++; } } if ( idxTomb1 > idxTomb2 ) { System.out.println( "Az elso tombben van tobb " + "egyedi ertek." ); } else if ( idxTomb1 < idxTomb2 ) { System.out.println( "A masodik tombben van tobb " + "egyedi ertek." ); } else { System.out.println( "A ket tombben ugyanannyi " + "egyedi ertek van." ); } } } |
Tisztelt Mikó Csaba
Talán tévedek, de mikor önállóan oldottam meg a feladatot, nekem a megoldás alapján nem volt helyes, de miután kiegészítettem még egy darab idx++; a második tárolás után, úgy már működött.
// Helyezd el egy harmadik tömbben a két tömb elemeit úgy,
// hogy a fájlban azonos sorban lévő elemek egymás után
// legyenek! Első tömb 1. eleme, második tömb 1. eleme,
// első tömb 2. eleme, stb. Írd ki az új tömböt a képernyőre!
int[] tomb3 = new int[tomb1.length+tomb2.length];
int idx = 0;
for( int i = 0; i < tomb1.length; i++ )
{
tomb3[idx] = tomb1[i];
idx++;
tomb3[idx] = tomb2[i];
}
Helyesen:
int idx = 0;
for( int i = 0; i < tomb1.length; i++ )
{
tomb3[idx] = tomb1[i];
idx++;
tomb3[idx] = tomb2[i];
idx++;
}
Igen, valóban hiba volt. Sajnos nem sok időm volt mostanában az oldalra ránézni, így ettől függetlenül véletlenül én is megtaláltam
Most néztem meg a címedet, szerintem tanítottalak Viktor 
Ez a feladat:
Helyezd el egy harmadik tömbben a két tömb elemeit úgy,
hogy a fájlban azonos sorban lévő elemek egymás után
legyenek!…
csak akkor fogja ebben a sorrendeben berakni a számokat a tömb3-ba, ha
int idx=0;
{tomb3[idx]=tomb1[i];
idx++;
tomb3[idx]=tomb2[i];
idx++; //ez a sor kell még
}
Találtam egy hibát a megoldásomban, javítottam. Közben ahogy haladtam a hozzászólásokon, látom már ketten is jeleztétek. Köszönöm, hogy olvassátok