Hogyan lehet megcsinálni ezt a feladatot? Java
A Vector osztályban levő adatok reprezentációját cseréljük ki tömbről egész számokat (Integer) tartalmazó láncolt listára. A Vector show műveltét írjuk át olyanra, amely előállít (és visszaad) egy String-et (a korábbihoz hasonló formátumban). Használjunkjava.lang.StringBuilder-t a szöveg előállításához.
Kód:
class Calculator4{
public static void main(String args[]){
if(args.length<2){
System.out.println("Nincs eleg parameter.");
System.exit(0);
}
else{
//paraméterként két vektort adunk meg a vesszővel elválasztva
Vector1 vector = new Vector1(loadInputs(args[0]));
Vector1 vector2 = new Vector1(loadInputs(args[1]));
vector.addVector(vector2).show();
System.out.println("A ket vektor skalaris szorzata: "+vector.scalarProd(vector2));
}
}
public static int[] loadInputs(String args){
String[] array = args.split(",");
int[] a = new int[array.length];
for(int i=0;i<array.length;i++){
a[i]=Integer.parseInt(array[i]);
}
return a;
}
}
class Vector1{
private int[] array;
public Vector1(int[] initData){
this.array=initData;
}
public void show(){
String string = "[";
for(int i=0;i<array.length;i++){
if(i==array.length-1){
string+=array[i]+"]";
}
else{
string+=array[i]+",";
}
}
System.out.println(string);
}
public Vector1 addVector(Vector1 v){
int[] b = new int[array.length];
for(int i=0;i<array.length;i++){
b[i]=array[i]+v.array[i];
}
return new Vector1(b);
}
public int scalarProd(Vector1 v){
int ossz=0;
for(int i=0;i<array.length;i++){
ossz+=array[i]*v.array[i];
}
return ossz;
}
}
[link] (private final LinkedList<Integer> data)
[link] (itt az append metódus lesz most a lényeg)
public void show -> public String show. System.out helyett a StringBuilderbe hányod a szöveget, majd a végén return (toStringgel).
Figyelj oda, hogy
- Ne használj magyar szöveget a forráskódban
- Kerüld az "a", "b" és hasonló azonosítókat. Legyen mindennek közérthető, beszédes elnevezése. Az "array" sem jó elnevezés. Most például, ki kell cserélned az Array-t LinkedListre. Ha az azonosító marad a régi, a forráskód hazudni fog. Valószínűleg a "data" célravezetőbb lenne, illetve a parser metódusban talán a "segments" vagy valami hasonló.
- Kerüld a kommentek használatát. Az esetek 99%-ában (ezalól a JavaDoc többnyire kivétel) teljesen feleslegesek/zavaróak, és/vagy csak a kódminőség hiányosságait próbálja velük az ember ellensúlyozni; amit értelemszerűen nem szabad. Ökölszabály: a kódból legyen olvasható, hogy mi történik, a kommentnek akkor van helye, ha tömören el kell magyarázni, miért. A main-ben levő komment információja speciel nem is tartozik oda, mert a szóbanforgó problémával loadInputs foglalkozik.
- Brace-eknél, indentálásnál igyekezz követni a konvenciót (pl. az else lehetőleg ne kerüljön új sorba)
Bónusz:
- scalarProd -> dotProduct
- loadInputs beszédesebb volna parseVector névvel, Vector1 típusú visszatérési értékkel
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!