[nybörjade] Skapa union mellan vektorer java

Permalänk
Medlem

[nybörjade] Skapa union mellan vektorer java

Jag har en uppgift i programmering som jag suttit fast i ett tag nu. Den går ut på att skapa två vektorer, inga problem hittills, sen ska man få ut unionen och snittet av dessa och där sitter jag fast. Jag skulle behöva vägledning här för att komma vidare.

Jag tänker mig att man kanske ska använda en if sats för att kontrollera om ett tal i vektor 2 finns i vektor ett och så kollar man det på varje plats. Om talet inte finns i den andra vektorn lägger man till det i en tredje vektor, om talet finns i vektorn så lägger man inte till det. Problemet är att jag inte lyckas skriva detta.

Edit: Jag har lyckats med att få programmet att välja en true eller false beroende på om värdet finns i en annan array. Nu behöver jag dock få den att lägga till värdet i en array om den inte fanns i den första och här sitter jag nu.

Jag la koden som jag gjort hittills i spoilertaggen.

import java.util.Arrays;

public class Ettafyrasjua {
public static void main(String []args){
int[] a ={1,2};
int[] b ={3,2};
int[] c = a;
int[] d= new int[a.length + b.length];
System.arraycopy(a, 0, d, 0, a.length);
System.arraycopy(b, 0, d,a.length, b.length);
Arrays.sort(d);
for (int i : d)
System.out.print(i);

boolean f1 =false;
boolean f2 =false;
boolean f3 =false;
boolean f4 =false;

if(b[0]==a[0]){
f1 = true; }

if (b[0]==a[1]){
f2 = true;}

if (b[1]==a[0]){
f3 = true;}

if (b[1]==a[1]){
f4 = true;}

}

}

Dold text
Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Pseudokod :

foreach(v1 as value) if(!v2.hasValue(value)) v3.add(value)

Permalänk
Medlem

Inte helt säker men detta bör stämma?

Union:

List<T> union = new Vector(vector1); union.addAll(vector2);

Snitt:

List<T> intersection = new Vector(vector1); intersection.retainAll(vector2);

Permalänk
Medlem

Jag börjar bli rätt säker på att koden jag gjorde där uppe är 100% fel. Jag har suttit i många timmar och har inte den blekaste aning och därför ber jag om mer hjälp för att komma någon vart. Det står att man ska använda en heltalsvektor så jag skapade en array. Men eftersom att man jobbar med mängder så gissar jag på att man inte kan använda en array, stämmer det?

OBS jag vill verkligen inte dra någon fuling där någon här löser uppgiften, jag behöver bara hjälp att fatta vad jag ska göra då jag suttit i ett antal timmar och inte kommer någonstans.

Jag lägger uppgiften i spoilern så att ni förstår vad jag försöker fråga.

Skriv ett program som skapar två heltalsmängder och initierar dem med ett antal
element, samt visar innehållet i dessa mängder. Notera att en mängd per definition
inte kan innehålla dubbletter av ett element. Visa sedan upp vardera mängden på så
sätt att dess element kommer i stigande ordning.
Beräkna till sist unionen, snittet och differensen av mängderna och visa även dem.
Unionen av två mängder representeras av en tredje mängd, där alla element från båda
de ursprungliga mängderna ingår (inga dubbletter). Snittet av två mängder är en tredje
mängd som omfattar de element som finns i både den första och andra mängden (gemensamma element). Differensen av två mängder är en tredje mängd som
innehåller alla element som finns i den första mängden men inte i den andra mängden.
Gör två versioner av det här programmet. Den första versionen använder
heltalsvektorer för att lagra mängderna. Den andra använder Javas TreeSet klass.

Dold text
Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Vad exakt är det jag ska använda när det står heltalsvektor? Vad är den engelska översättningen av det?

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Intressant uppgift.

Det som är mest oklart i frågan är just vad en heltalsvektor är. Det kan antingen röra sig om en int[] eller en av collectionklasserna som den gamla Vector<Integer> eller eller ArrayList<Integer>. Fast nu tror jag det är den förstnämnda.

Det som gör det problematiskt är att man måste definera storleken på en sådan i förhand.

iXam har gjort ett kort inlägg i tråden men är väldigt nära det allmänna tillvägagångssättet för de tre delmomenten uppgiften består av (union, snitt och differans).

Varför krångligt kan man tänka först. Ta unionen till exempel. Hur många element behöver den vektorn rymma? Det är inte nödvändigtvis storleken av a + b för att det skulle vara en "mängdunion" där inte dubbletter är tillåtna. Det kan finnas element i b som också finns i a.

Jag skulle använda följande tankesätt för de tre deluppgifterna
- Behöver jag loopa igenom a?
- Behöver jag loopa igenom b?
- Vad är villkoret för att jag ska få stoppa in ett element i målmängden?

Så får att ta unionen som exempel
- Behöver jag loopa igenom a för att vara säker på att alla element ska vara med i unionen?
- Behöver jag loopa igenom b för att vara säker på att alla element ska vara med i unionen?
- Får jag alltid stoppa in "kandidater" från a eller b i unionvektorn?

Detta var några tips på vägen.

//C

EDIT: Att fråga om det är int[] eller Vector/Arraylist du ska använda tycker jag låter som en mycket lämplig fråga till din lärare.

Permalänk
Medlem

Kolla in skillnaderna mellan Set och List (http://docs.oracle.com/javase/6/docs/api/java/util/Set.html, http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.h...). Javadoc för Collections är också intressant för att förstå hur du kan använda sortering etc (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collec...).

exempel på hur du kan typa dessa interface:

List<Integer> l = new Vector<Integer>(); Set<Integer> s = new TreeSet<Integer>(); // om du mot förmodan vill göra en lista av strängar, List<String> l = new Vector<String>();

Set och List är interface. ArrayList, Vector samt HashSet, TreeSet, etc är implementationer av interfacen.

Permalänk
Medlem

Värt att tillägga att "mängd" i det här fallet är samma sak som "set" på engelska. Så klassen TreeSet som ska användas i den alternativa lösningen är en klass som automatiskt ser till att man inte kan stoppa in dubletter i den, vilket gör saker mycket smidigare.

//C

Permalänk
Medlem
Skrivet av flyawaynille:

Vad exakt är det jag ska använda när det står heltalsvektor? Vad är den engelska översättningen av det?

Här har du ett exempel på en heltalsvektor som är deklarerad och initierad

int numbers[] = {1,2,3,4,5};

Permalänk
Medlem
Skrivet av DKPJ:

Här har du ett exempel på en heltalsvektor som är deklarerad och initierad

int numbers[] = {1,2,3,4,5};

Det är med en sån vektor jag har byggt. Det som gör med konfundersam är ju att det står att man ska använda en mängd och att mängder inte kan ha dubletter, den där vektorn kan ju ha dubletter i sig.

En sak jag har problem med i den typen av vektor är att lägga till de i en tredje vektor för unionen. Jag använder if satser för att kontrollera ifall varje del i vektor b finns i vektor a, det jag inte vet är hur jag gör för att flytta in de från b till en tredje vektor för unionen.

Jag har gjort andra delen där man gör treeset så den är jag klar med.

Edit: Tack så mycket för tipsen från alla, mycket hjälpsamt

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem
Skrivet av flyawaynille:

Det är med en sån vektor jag har byggt. Det som gör med konfundersam är ju att det står att man ska använda en mängd och att mängder inte kan ha dubletter, den där vektorn kan ju ha dubletter i sig.

En sak jag har problem med i den typen av vektor är att lägga till de i en tredje vektor för unionen. Jag använder if satser för att kontrollera ifall varje del i vektor b finns i vektor a, det jag inte vet är hur jag gör för att flytta in de från b till en tredje vektor för unionen.

Jag har gjort andra delen där man gör treeset så den är jag klar med.

Edit: Tack så mycket för tipsen från alla, mycket hjälpsamt

Jag antar att du helt enkelt måste se till så att det inte kan bli dubbletter.
Är det hårdkodat eller är det användaren som fyller i mängderna?

Om du kollar om element a[0] finns i b så kan du när du är klar antingen välja att lägga in elementet i en ny vektor (på samma sätt som vanligt) eller så väljer du att göra ingenting (om det redan finns i b).

Permalänk
Medlem

Kan tillägga att uppgiften görs i array. Det jag nu då undrar om ni ser min kod som finns i första inlägget är: Hur lägger jag till saker från array b till en tredje array om de inte finns i A? Jag kör ju mina if satser för att kontrollera om de finns men det jag inte vet är hur jag sen lägger till dem i en array tillsammans med dem i A.

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Ingen som har ett svar på hur jag kan välja att lägga till från en array till en annan array om en sak är true? Alltså på unionen så lägger jag till alla från båda arrays, vilket jag inte helt hundra kan, vet bara hur jag ska ta från ena. Och sen för snittet så tar jag om b1 finns i a så är det true och det ska läggas till och så vidare. Det jag inte har den blekaste om är hur jag gör denna tillägning

Edit: Efter att läraren tyckte att man kunde säga vektor istället för array har det kommit fram till att det är array och inget annat som används.

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell