Kezdőoldal » Számítástechnika » Programozás » Javaban tanulok programozni,...

Javaban tanulok programozni, viszont nem ertem, hogy miert nem mukodik ez a megoldas. (? )

Figyelt kérdés

Feladat: Adott T tantárgyból versenyt rendeznek és meg kell keresni az első 5 helyezettet minden versenyből, melyet át kell tölteni egy másik tömbbe.

A legjobbat meg tudom határozni, de amikor kinulláznám azt az értéket, hogy a következő vizsgálatnál a legtöbb a 2. legyen, akkor valamiért nem működik.



package Szunet;

import extra.Console;

public class Harom305 {

public static void main (String[] args){

int t = Console.readInt("Hány tantárgy? ");

int[][] tanulo = new int[t][10];

int[] kirand = new int[t*5];

int max, index = 0, szamol = 0, a = 0;


//MÁTRIX FELTÖLTÉSE

for (int i = 0; i < t; i ++)

{

for (int j = 0; j < tanulo[i].length; j++)

{

tanulo[i][j] = (int)(Math.random()*101)+1;

System.out.print(tanulo[i][j]+" ");

}

System.out.println();

}



for (int i = 0; i < t; i ++)

{

max = tanulo[i][0];

a = 0;

do

{

for (int j = 0; j < tanulo[i].length; j++)

{

//MAXIMUM MEGHATÁROZÁSA

if (max < tanulo[i][j])

{

max = tanulo[i][j];

index = j;

}

}


//A MAXIMUM ÉRTÉK KINULLÁZÁSA

tanulo[i][index] = 0;


//AZ MAXIMUM HELYÉNEK FELTÖLTÉSE EGY ÚGY TÖMBBE

kirand[szamol] = index;


//'KIRAND' TÖMB LÉPTETÉSE

szamol++;


a++;

}

//5-SZÖR FUSSON VÉGIG

while (a < 5);

System.out.println();

}


//'KIRAND' TÖMB KIÍRATÁSA

for (int i = 0; i < kirand.length; i++)

{

System.out.print(kirand[i] + " ");

}



}

}


2016. nov. 3. 14:16
 1/4 anonim ***** válasza:
Pastebin re rakd a kódot, ez így borzalmasan gettó.
2016. nov. 3. 14:21
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
pastebin "pont" com/wk5abnHz
2016. nov. 3. 14:46
 3/4 A kérdező kommentje:
Másképp nem engedi a linket
2016. nov. 3. 14:46
 4/4 anonim ***** válasza:

Az a baj hogy a

max = tanulo[i][0];

sornak a do-n belül kell lennie és nem kívül, mert anélkül az előző max értéke (amit kinulláztál, de a max változó ugye még tartalmazza) megmarad, és semmi sem lesz nála nagyobb.


És még ezután is baj lesz akkor ha a legelső szám a legnagyobb, mert akkor nem teljesül az if (max < tanulo[i][j]), és az index-et nem update-eled (mert az if-en belül van) Két lehetséges megoldás:

1. a do elejére beteszed hogy

index = 0;


2. if (max < tanulo[i][j]) helyett if (max <= tanulo[i][j])


A két megoldás különböző sorrendbe fogja tenni a döntetlen eredményt elérőeket, az 1. balról jobbra, a 2. jobbról balra.

2016. nov. 3. 15:07
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!