Zavolání metody – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zavolání metody – Java – Fórum – Programujte.comZavolání metody – Java – Fórum – Programujte.com

 

Pavel
~ Anonymní uživatel
383 příspěvků
9. 1. 2013   #1
-
0
-

Ahoj lidičky, jsem amatér programátor, ale dostal jsem za úkol vypočítat kvadrantickou rovnici, tak jsem to zkusil, problém mi ale dělá, že když jsem udělal metodu, aby nic nevracela, tak zase nevím jak jí zavolat.

Kód zde:(zajímá mě, co dělám špatně?)

package projekt;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.util.Scanner;


public class rovnice {
   
    public static void  kvadrant ( int a, int b, int c, int x1, int x2)
    {
        int D=b*b-4*(a*c);
       
        if(D>0)
        {
            x1 = (-b + (int) Math.sqrt(D)) / (2 * a);
            x2 = (-b - (int) Math.sqrt(D)) / (2 * a);
            System.out.println("Rovnice má dvě řešení.");
       
        }
        else if (D == 0) {
            x1 = -b / (2 * a);
            System.out.println("Rovnice má jedno řešení.");
            System.out.print("x = " + x1);
        } else {
            System.out.print("Rovnice nemá řešení");
        }
   
    }
   
public static void main (String[]args)
  {
  
      Scanner s=new Scanner(System.in);
      System.out.println("zadejte kořen 1");
      int a=s.nextInt();
      System.out.println("zadejte kořen 2");
      int b=s.nextInt();
      System.out.println("zadejte kořen 3");
      int c=s.nextInt();
      kvadrant(a,b,c);
    
      System.out.print("Kořeny jsou :"+kvadrant);
     
     
   }
 
  }

Nahlásit jako SPAM
IP: 83.208.189.–
Pavel
~ Anonymní uživatel
383 příspěvků
9. 1. 2013   #2
-
0
-

edit: ten konec je takto:

   int vypocet=kvadrant(a,b,c)

      System.out.print("Kořeny jsou :"+vypocet);

Nahlásit jako SPAM
IP: 83.208.189.–
sleepy0
Stálý člen
9. 1. 2013   #3
-
0
-

Nechapem preco napuzivas double alebo aspon float, kedze nie kazde riesenie kr je cele cislo. Ale teraz k problemu, ak poterbujes vysledky tak ich musis nejakym sposobom vratit a to sa da rozne, asi najednoducsie je to urobit takto:

public float[] solveQE(float a, float b, float c){
	float D = b*b - 4*a*c // ako to mas
	float[] res = null;;
	if(D > 0){
		res = new float[2];
		res[0] = (-b + Math.sqrt(D))/(2*a);
		res[1] = (-b - Math.sqrt(D))/(2*a);
	}
	else if(D==0){
		res = new float[1];
		res[0] = -b/2*a;
	}

	return res;
}

public static void main(String[] arg){
	float a,b,c;
	// tu vygeneruje a, b, c nejakym sposobom
	float res = solveQE(a,b,c);
	if(res==null){
		// mozes taktiez generovat pole s 0 dlzkou, je to uplne
		// jedno, ja som ho nechal null
		System.out.println("Kvadraticka rovnica pre dane koeficienty nema realne korene");
	}
	else if(res.length == 1){
		System.out.println("Rovnica ma len jeden koren");
		System.out.println("x = "+res[0]);
	}
	else{
		System.out.println("Rovnica ma 2 realne korene");
		System.out.println("x1 = "+res[0]+"\tx2 = "+res[1])
	}
}

Da sa to samozrejme aj inak, napr. ti metoda bude vracat pocet R korenov {0,1,2}. A uz vytvorene pole das ako jeden z argumentov.

Nahlásit jako SPAM
IP: 158.195.204.–
Pavel
~ Anonymní uživatel
383 příspěvků
9. 1. 2013   #4
-
0
-

ahoj, moc děkuji za tvojí pomoc, ale na mě jakožto amatéra to je složité, nevím proč tam třeba používáš pole, a ty podmínky jsem taky moc nepobral, nedalo by se nějak napravit ten můj kód aby šlapal? jsem ti moc vděčný za tvůj čas, ale já potřebuji vědět, kde mám chybu a proč to je tak a tak  

Nahlásit jako SPAM
IP: 83.208.189.–
sleepy0
Stálý člen
9. 1. 2013   #5
-
0
-

Jednoducho, ak pocitas kvadraticku rovnicu obcas dostanes 2 realne riesenia, ale ty inym metodam o nich nemaz ako povedat lebo java dokaza navratit premennu nanajvys jednu, to je dovod pouzitia pola, ale hovorim existuju aj ine cesty, ale tie zdaleka niesu bud tak jednoduche, alebo to vyzera hrozne (dost necitatelne). To je dovod preco pouzivam pole, navyse ja si mozem nastavit velkost toho pola podla premennych, atd... . Dalsia vec ak nastavis metodu na void nikdy ti nic nevrati, ak nenastavis na nu nejaku referenciu na uz vytvoreny class. V jave nieje nikdy viditelna ta cast ktora je v nejakom "subbloku" zvonka.

Tie podmienky funguju tak, ze ak mas 1 koren vytvori sa pole o velkosti 1 a to sa vrati a ja si uz pomocou premennej length zistim aku ma pole velkost. Ak nema korene vrati sa null, ale bolo by lepsie pole s 0 dlzkou ktore vytvoris new float[0];

Ale dobre napisem iny kod, s globalnymi premennymi:

class Rovnica{
	float x1, x2;

	public static void main(String arg[]){
		// vygeneruj si cisla ako predtym
		float a,b,c;
		//tu to spocitas a ulozis to globalnych premennych x1,x2
		rovnica(a,b,c); // inak ak pre javu je dolezity pocet a typ premennych
		// spolu s nazvom to tvori signaturu metody a podla nej java rozoznava o aku metodu ide
		// tu metodu co si volal ty vobec nepoznala preto ti to neslo
		// z tej metody si nic nevracal (void) preto ti to nic neulozilo do vysledok
		// A tu to uz len nejakym sposobom vypises
		System.out.println("x1="+x1+" x2="+x2);
	}
	
	// metoda zostava taka aku si mal, akurat s inymi argumentami a to budu koeficient
	public void rovnica(float a, float b, float c){
		// tu mas to co si mal aj pred tym
	}
}
Nahlásit jako SPAM
IP: 158.195.204.–
Pavel
~ Anonymní uživatel
383 příspěvků
9. 1. 2013   #6
-
0
-

   

class krovnice {
    float x1,x2;
    
   public void rovnice(float a,float b, float c)
    {
        float D=b*b-4*(a*c);
        
        if(D>0)
        {
            x1 = (-b + (int) Math.sqrt(D)) / (2 * a);
            x2 = (-b - (int) Math.sqrt(D)) / (2 * a);
            System.out.println("Rovnice má dvě řešení.");
        
        }
        else if (D == 0) {
            x1 = -b / (2 * a);
            System.out.println("Rovnice má jedno řešení.");
            System.out.print("x = " + x1);
        } else {
            System.out.print("Rovnice nemá řešení");
        } 
    }
    
   public static  void main(String[]arg)
    {
      Scanner s=new Scanner(System.in);
      System.out.println("zadejte kořen 1");
      float x=s.nextInt();
      System.out.println("zadejte kořen 2");
      float y=s.nextInt();
      System.out.println("zadejte kořen 3");
      float z=s.nextInt();  
      float a,b,c;
      rovnice(a,b,c);
      System.out.println("x1="+x1+" x2="+x2);
    
    }
}

tak nějak takhle, ale nějak nevím co s tím bodem

float(a,b,c)

a výpočet těch x1,x2
//tu to spocitas a ulozis to globalnych premennych x1,x2

Co dělám špatně?? Jinak dík za vysvětlení ohledně metod a důvodu toho pole ;)

Nahlásit jako SPAM
IP: 83.208.189.–
sleepy0
Stálý člen
10. 1. 2013   #7
-
0
-

Mas to dobre, ale to vygenerovanie float som myslel, tak ako si to mal ty, nic ine nebolo treba. Asi takto:

public static void main(String[] arg){
	float a, b, c;
	Scanner s = new Scanner();
	a = s.nextFloat(); // to iste ako nextInt() ale mozes tam dat desatinne cislo
	b = s.nextFloat();
	c = s.nextFloat();
	rovnice(a,b,c);
	System.out.println("x1="+x1+" x2="+x2);
}
Nahlásit jako SPAM
IP: 158.195.204.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý