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 🙂