Sida 1 av 1
Hjälp med "lätt" JAVA-kod
Postat: 09 jul 2009, 20:10
av ellanbellan
Hejsan!
Har fastnat på en uppgift jag fått, då jag aldrig varit nå vidare på JAVA, utan var mer av en hejjare på Erlang. Men nu är jag hursomhelst fast. Jag vet inte mycket om JAVA, men vet att denna kod innehåller en heltals array, for loopar, och en metod i metoden. Har bara fått massa svåra svar, typ "tänk som en kompliator", utan att riktigt få... öh, svar eller hjälp.
Vad gör den och hur gör den? (förklara algoritmen, tack!)
Kod: Markera allt
public int [] foo(int [] x){
int tmp;
for(int i=x.length, i>0; i--)
for(int j=1; j<i; j++)
if (x[j-1]>x[j])
{
tmp = x[j]
x[j]=x[j-1];
x[j-1]=tmp;
}
return x
}
Re: Hjälp med "lätt" JAVA-kod
Postat: 09 jul 2009, 20:52
av Konservburk
ellanbellan skrev:Kod: Markera allt
if (x[j-1]>x[j])
{
tmp = x[j]
x[j]=x[j-1];
x[j-1]=tmp;
}
Den där biten byter plats på elementen om föregående element är större än nuvarande element.
ellanbellan skrev:Kod: Markera allt
for(int i=x.length, i>0; i--)
for(int j=1; j<i; j++)
Det här talar om på vilket sätt den löper igenom elementen. Först från början till slutet, sedan åter igen från början och nästan till slutet, osv tills den tillslut inte löper längre än från början till början.
Om vi ska ta det på svenska så flyttar den det största talet till slutet, sedan det näst största talet till platsen innan slutet, osv. Exakt vad det innebär kan du ju fundera över.

Re: Hjälp med "lätt" JAVA-kod
Postat: 10 jul 2009, 15:26
av ellanbellan
Ja, det låter ju som den sorterar en array med x antal i index eller vad man nu kallar det.
tycker Java är skitsvårt, det är massa saker som läggs in i koden utan att man riktigt kan se varför. Helt annorlunda i Erlang där man faktiskt kan se bara genom att titta på vad som funkar. Eller så är det jag som bara är dålig.

Re: Hjälp med "lätt" JAVA-kod
Postat: 10 jul 2009, 15:51
av TicToc
Utanför ämnet: Av ren nyfikenhet, hur ser motsvarande kod ut i Erlang?
Re: Hjälp med "lätt" JAVA-kod
Postat: 10 jul 2009, 16:08
av ellanbellan
Jag vet inte, man använder sig inte av arrayer i erlang. nån form av rekursion skulle väl eventuellt ske. Har löst uppgiften på en annan dator när jag var i min "programmerings-prime" men nu har jag glömt allt. jävla sommar.
Re: Hjälp med "lätt" JAVA-kod
Postat: 10 jul 2009, 19:56
av Konservburk
TicToc skrev:Utanför ämnet: Av ren nyfikenhet, hur ser motsvarande kod ut i Erlang?
Det här borde göra samma sak (med reservation för att det går att skriva om det bättre... jag tycker att erlang och andra icke imperativa programmeringsspråk kan bli ganska förvirrande):
Kod: Markera allt
-module(x).
-export([b/1]).
a([A|B],C) -> [A|a(B,C)];
a([],B) -> [B].
b(B) -> b([],B,[]).
b(A,[X,Y|B],C) when X>Y -> b(a(A,Y),[X|B],C);
b(A,[X,Y|B],C) -> b(a(A,X),[Y|B],C);
b(A,[B],C) -> b([],A,[B|C]);
b([],[],C) -> C.
Re: Hjälp med "lätt" JAVA-kod
Postat: 10 jul 2009, 20:01
av TicToc
Oj

, hjälp vad glad jag är över att jag använder java.
Re: Hjälp med "lätt" JAVA-kod
Postat: 10 jul 2009, 21:34
av Konservburk
Som sagt inte helt uppenbart eftersom strukturen blir helt annorlunda utan några loopar. Motsvarande i java ser ut så ungefär här:
Kod: Markera allt
public static int[] b(int[] B) {
int[] X = {};
return b(X, B, X);
}
public static int[] b(int[] A, int[] B, int[] C) {
if (B.length >= 2)
{
int[] X = new int[A.length + 1];
int[] Y = new int[B.length - 1];
System.arraycopy(A, 0, X, 0, A.length);
if (B[0] > B[1])
{
X[A.length] = B[1];
Y[0] = B[0];
}
else
{
X[A.length] = B[0];
Y[0] = B[1];
}
System.arraycopy(B, 2, Y, 1, B.length - 2);
C = b(X,Y,C);
}
else if (B.length == 1)
{
int[] X = {};
int[] Y = new int[C.length + 1];
Y[0] = B[0];
System.arraycopy(C, 0, Y, 1, C.length);
C = b(X,A,Y);
}
return C;
}
Re: Hjälp med "lätt" JAVA-kod
Postat: 14 jul 2009, 22:56
av jsiei97
ellanbellan skrev:Hejsan!
Har fastnat på en uppgift jag fått, då jag aldrig varit nå vidare på JAVA, utan var mer av en hejjare på Erlang. Men nu är jag hursomhelst fast. Jag vet inte mycket om JAVA, men vet att denna kod innehåller en heltals array, for loopar, och en metod i metoden. Har bara fått massa svåra svar, typ "tänk som en kompliator", utan att riktigt få... öh, svar eller hjälp.
Hej
Ett mer och bättre råd är att stoppa in koden i en debugger, och sedan stega igenom koden och titta på vad som händer med variablerna.
Har t.ex. för mig att eclipse har en sådan debugger i sig,
och när man ser ett program stegas fram så är det mycket lättare att förstå vad som händer och varför.
Mvh Johan
Re: Hjälp med "lätt" JAVA-kod
Postat: 16 jul 2009, 20:26
av Inhuman Soul
jsiei97 skrev:ellanbellan skrev:Hejsan!
Har fastnat på en uppgift jag fått, då jag aldrig varit nå vidare på JAVA, utan var mer av en hejjare på Erlang. Men nu är jag hursomhelst fast. Jag vet inte mycket om JAVA, men vet att denna kod innehåller en heltals array, for loopar, och en metod i metoden. Har bara fått massa svåra svar, typ "tänk som en kompliator", utan att riktigt få... öh, svar eller hjälp.
Hej
Ett mer och bättre råd är att stoppa in koden i en debugger, och sedan stega igenom koden och titta på vad som händer med variablerna.
Har t.ex. för mig att eclipse har en sådan debugger i sig,
och när man ser ett program stegas fram så är det mycket lättare att förstå vad som händer och varför.
Mvh Johan
Ett annat sätt man kan göra för att lättare förstå vad som händer är att göra utskrifter i koden (kallas debuggutskrifter). Oftast skriver man ut variablernas värde. För att skriva ut något i Java använder man:
eller om man vill ha ett "enter-tecken" efter:
Dock finns det ingen utskriftsfunktion för heltalsarrayer. Du kan ju lära dig lite genom att skriva en egen!

Re: Hjälp med "lätt" JAVA-kod
Postat: 16 jul 2009, 20:29
av TicToc
Citat tar taggar, det gör inte kod.
System.out.println(variavel/värde);