Gå til innhold

Nybegynnerspørsmål, public static void main(String[] args)


Anbefalte innlegg

Igjen, takk for svar!

Har begynt å prøve litt på arrays, nå, og har laget følgende klasse som skal opprette et array med plass til ti interers, og gi verdier 100, 200, 300 og opp til 1000.

class ArrayDemo {
 public static void main(String[] args) {
int anArray[] = new int[10]; //Deklarere et array, men plass for 10 integere

//gi verdi til indexene i anArray, verdier fra 100 til 1000
for(int item : anArray) {
  anArray[item] = (item + 1)*100;
}

//Skrive ut anArray
int i = 0;
for(int item : anArray) {
  System.out.println("Index " + i + " i anArray er " + item + "!");
  i++;
}
 }
}

Men det funker ikke helt. Får bare output:

 

Index 0 i anArray er 100!

Index 1 i anArray er 0!

Index 2 i anArray er 0!

Index 3 i anArray er 0!

Index 4 i anArray er 0!

Index 5 i anArray er 0!

Index 6 i anArray er 0!

Index 7 i anArray er 0!

Index 8 i anArray er 0!

Index 9 i anArray er 0!

 

Noen som ser noe gale? Skulle tro at problemet ligger i en første løkken, siden index 0 faktisk blir 100, men resten blir null, men vet ikke..

Lenke til kommentar
Videoannonse
Annonse

Du kan ikke bruke en foreach(for (Object obj : objects)) løkke når du skal gi verdier til en liste.

Når du bruker en foreach løkke, får du bare en kopi av elementet og ikke selve referansen til variabelen som er i listen.

 

Det du gjør med den første løkken er ikke å skaffe indeksen til alle elementene, men du får verdien, som er 0, siden det er standardverdien til heltall(0.0 for flytetall, 0 for char, false for boolean).

 

Hvis du vil ha indeksen til hvert element i arrayen, så må du bruke en vanlig for-løkke:

 

for (<init>; <cond>; <inc>) {
<code>
}

<init>: Initiering av tellevariabelen, for eksempel int i = 0. Utføres før løkken starter

 

<cond>: En tilstandsjekker som utføres hver gang før koden blir kjørt. i < array.length

 

<inc>: Oppdatering av tellevariablen. Utføres hver gang etter koden har kjørt. i++

 

<code>: Koden som skal utføres i løkken. :)

 

Eksempel:

for ( int item = 0; item < anArray.length; item++ ) {
 anArray[item] = (item + 1) * 100;
}

 

Hvis det er noe du ikke forstår, så er det bare å spørre, for-løkker er alltid vanskelig for nybegynnere. ;)

 

Edit:

Java tutorialen har en for-løkke side:

http://java.sun.com/docs/books/tutorial/ja...dbolts/for.html

Endret av RavnTM
Lenke til kommentar

Tusen takk! Fikk det til nå!

Men bare for å være sikker, det jeg egentlig har gjort er å sette anArray[0] = 100 ti ganger?

 

Og så et nytt spørsmål. Inspirert av kodeeksemplene nederst her på multi-dim-arrays og System.copyarray bestemte jeg meg for å lage en ny klasse som kopierer multi-dim-arrays. Her er den foreløpige koden, og jeg har et par problemer..

//Lager en matrise som kan kopieres fra og en som kan kopieres til.
class lagMatrise {
 public static void main(String[] args){
String[][] matrise = {{"Anne ", "Berit ", "Heidi ", "Lise "}, 
					  {"Alfred ", "Birger ", "Jon ", "Petter "}, 
					  {"Andersen", "Fredriksen", "Hansen", "Thorsen"},
					  {"Breim", "Dombås", "Helle", "Kallstad", }};
String[][] kopierTil;
 }
}

class matriseCopy {
 //Declare member fields
 private static Object from;
 private static int startFromX;
 private static int startFromY;
 private static Object to;
 private static int startToX;
 private static int lengthX;
 private static int startToY;
 private static int lengthY;

 public static void main(String[] args) {
copyFrom = args[0];
startFromX = Integer.parseInt(args[1]);
startFromY = Integer.parseInt(args[2]);
copyTo = args[3];
startToX = Integer.parseInt(args[4]);
lengthX = Integer.parseInt(args[5]);
startToY = Integer.parseInt(args[6]);
lengthY = Integer.parseInt(args[7]);

for(int i = 0; i < lengthY; i++){
  System.arraycopy(copyFrom, startFromX, copyTo, lengthX);
}
 }
}

/** Klassen Kopier kaller lagMatrise, oppretter en ny matrise og kopierer 
 * en bit fra lagMatrise til den nye ved å bruke matriseCopy.main().
 */
class Kopier {
 public static void main(String[] args) {

System.out.println(new String(matrise));
 }
}

Først av alt er jeg usikker på måten å opprette felt knyttet til klassen. Skal det gjøres på denne måten? og skal de være public static? Og går dette an med objekter?

 

Får feilmelding på linjene, copyFrom = args[0]; og copyTo = args[3];

cannot find symbol

symbol : variable copyFrom

location: class matriseCopy

 

Får så de samme to feilmeldingene på linjen System.arraycopy(copyFrom, startFromX, copyTo, lengthX);

 

Ser altså ut til at det ikke funker å hente inn objekter slik jeg har prøvd å gjøre det. Hvordan kan dette gjøres?

 

 

Så til slutt får jeg en feilmelding på linjen System.out.println(new String(matrise));

Hva er galt her?

(Vet at klassen Kopier ikke gjør noe av det den skal gjøre enda. Det kommer ;))

Endret av toss
Lenke til kommentar
  • 3 uker senere...

Ingenting med det som står i tråden å gjøre, men siden det er et nybegynnerspøsmål så spør jeg her, for å slippe å rote til forumet med en ny tråd.

 

Jeg har aldri programmert noe som helst i Java, men leste et eksempel hvot man bruker en klassetype kalt konto. Fungerer det å gi kommandoer til den, som finn saldo, på norsk, eller har jeg misforstått?

Lenke til kommentar
Ingenting med det som står i tråden å gjøre, men siden det er et nybegynnerspøsmål så spør jeg her, for å slippe å rote til forumet med en ny tråd.

 

Jeg har aldri programmert noe som helst i Java, men leste et eksempel hvot man bruker en klassetype kalt konto. Fungerer det å gi kommandoer til den, som finn saldo, på norsk, eller har jeg misforstått?

 

Klassen "konto" du snakker om er sikkert en brukerdefinert klasse. Hvilke metoder ("kommandoer") du kan kalle på et objekt av klassen kommer an på hva som er definert i klassen. Metodene kan for eksempel hete "finnSaldo()" og "hvaHeterEierenKanskjeHanHeterPetter()" (akkurat hva du vil, med andre ord), men man bør som regel bruke engelske navn, hvilket vil si at de to nevnte metodene burde hete "getBalance()" og "getOwnerName()" eller lignende. Metoder kan heller ikke ha mellomrom, så akkurat "finn saldo" er ikke mulig.

Lenke til kommentar
Takk for svar.

 

Tenkte jeg skulle teste ut Java, og har lastet ned versjonen som heter "jdk-6u11-windows-i586-p" og lagret den på skrivebordet. Hva skal da stå i miljøvariabelen "path"? Får det ikke til å virke.

 

Vanligvis har man en miljøvariabel som heter JAVA_HOME, som, hvis du installerte på standardplasseringen, peker til

C:\Program Files\Java\jdk1.6.0_11\bin

 

Når du har laget denne, kan du legge følgende til PATH-variabelen

;%JAVA_HOME%

 

Alternativt kan du bare legge følgende til PATH:

;C:\Program Files\Java\jdk1.6.0_11\bin

 

Disse kan du sette ved å gå på (engelsk hos meg); Control Panel --> System --> System Properties --> Advanced --> Environment Variables

Endret av atsjoo
Lenke til kommentar
Forutsetter det at man har en mappe som er kalt "java" som inneholder Java som jeg har flyttet fra skrivebordet liggende i "Program Files"?

 

Det forutsetter at du har kjørt installasjonsfila til "Java SE Development Kit (JDK) 6 Update 11", som, om du ikke har det fra før, kan lastes ned HER

Lenke til kommentar
Forutsetter det at man har en mappe som er kalt "java" som inneholder Java som jeg har flyttet fra skrivebordet liggende i "Program Files"?

 

Det forutsetter at du har kjørt installasjonsfila til "Java SE Development Kit (JDK) 6 Update 11", som, om du ikke har det fra før, kan lastes ned HER

 

Jeg måtte bytte ut "Program Files" med "Programfiler" får å få det til å virke, men at jeg ikke skjønte det tar jeg på min kappe. Er ikke spesielt god på PC sammenlignet med mange andre som programmerer. Takk for hjelpen!

Lenke til kommentar
Jeg måtte bytte ut "Program Files" med "Programfiler" får å få det til å virke, men at jeg ikke skjønte det tar jeg på min kappe. Er ikke spesielt god på PC sammenlignet med mange andre som programmerer. Takk for hjelpen!
Det har ikke mye å si, det kan jeg love deg. Har hatt forelesere i programmering på universitetsnivå som knapt visste forskjell på Windows og Apples OS-er, og det har vært en fryd å se dem hamre løs på Fedora-PC-ene.

 

Så det skal du ikke bry deg med. Å pugge operativsystemer har ikke mye til felles med å lære programmering.

Endret av pgdx
Lenke til kommentar
  • 2 uker senere...
Jeg måtte bytte ut "Program Files" med "Programfiler" får å få det til å virke, men at jeg ikke skjønte det tar jeg på min kappe. Er ikke spesielt god på PC sammenlignet med mange andre som programmerer. Takk for hjelpen!
Det har ikke mye å si, det kan jeg love deg. Har hatt forelesere i programmering på universitetsnivå som knapt visste forskjell på Windows og Apples OS-er, og det har vært en fryd å se dem hamre løs på Fedora-PC-ene.

 

Så det skal du ikke bry deg med. Å pugge operativsystemer har ikke mye til felles med å lære programmering.

 

La meg gjette, UiB og INF forelesning? :p (hørtes kjent ut..)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...