Avatar billede mads1987 Nybegynder
01. december 2004 - 18:03 Der er 33 kommentarer og
1 løsning

Skriv til array.

Hej, jeg har brug for lidt hjælp, til at skrive værdier til at array.

Min plan er at jeg har et array med x antal værdier, kunne f.eks. være 10:

int[] arr = new int[10];

Herefter skal en forløkke sprøge mig 10 gange om en værdi, og disse værdier skal så skrives til de 10 pladser i arrayet.

Forlækken klare jeg, men hvordan skriver jeg til arrayet?
Avatar billede europe Nybegynder
01. december 2004 - 18:07 #1
/*skriv til det*/
int[] arr = new int[10];
for(int i = 0;i<arr.length;i++) {
  arr[i]=i;
}

/*skrive udfra array*/
for(int x = 0;x<arr.length;x++) {
  System.out.println("plads "+x+" indeholder : "+arr[x]);
}


Håber det var svaret du ledte efter..

/Europe
Avatar billede mads1987 Nybegynder
01. december 2004 - 18:13 #2
Ikke helt, fordi jeg skal selv kunne vælge 10 forskellige tal som skal kan indsættes.
Avatar billede europe Nybegynder
01. december 2004 - 18:17 #3
Okay

arr[i]='indsæt selv et tal'

arr['array plads']  -  array plads start ved 0 og går til størrelse minus 1

håber det giver lidt mere forklaring.
Avatar billede mads1987 Nybegynder
01. december 2004 - 18:24 #4
Ikke helt, vi prøver lige at løse det må en anden måde.
Lige lidt kode:

do{
                                            int tal = Keyboard.readInt();
   
        if(tal==0){
        talvalg = false;
        }
} while(talvalg == true);

Altså kan vi lige så længe, at vi ikke indtaster 0 som værdi, blive ved at indtaste et tal. Hvordan putter jeg disse tal ind i et array?
Avatar billede europe Nybegynder
01. december 2004 - 18:30 #5
Okay - der et lille problem her men det kan nok løses....
Først et array er ikke særlig dynamisk - den bliver angivet til en størrelse og man kan så ikke komme flere elementer i den end det. Dvs. her kan der kun være 10 elementer da du angiver det med new int[10].
Så der det skal vi også lige checke for men så kommer det til at se sådan ud.

int arrCount = 0;
do{
  int tal = Keyboard.readInt();
  arr[arrCount] = tal;
  arrCount++;
  if(tal==0||arrCount==arr.length) {
    talvalg = false;
  }
}while(talvalg==true);
Avatar billede mads1987 Nybegynder
01. december 2004 - 18:45 #6
Jeg kan ikke rigtig se hvad der sker. Hvor er det mit array med alle tallene befinder sig?
Avatar billede europe Nybegynder
01. december 2004 - 18:56 #7
Jeg har lavet en arrCount som bliver brugt til at holde styr på hvor langt jeg er kommet med at lægge elementer ind i arrayet. Sørger så lige for i if'en at checke på om jeg kan putte mere ind i arrayet samtidig med at jeg checker om der skrevet 0.

int[] arr = new int[10];
int arrCount = 0;
do{
  int tal = Keyboard.readInt();
  arr[arrCount] = tal;  //lægger tallet ind i dit array.
  arrCount++;
  if(tal==0||arrCount==arr.length) {// checker om der er tastet 0 eller om arrayet
                                    // er fuldt
    talvalg = false;
  }
}while(talvalg==true);

Der skal lige siges at det 0 der tastet også kommer med i arrayet..

håber det var forklaring nok ellers prøver vi bare igen.
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:02 #8
Tror jeg bliver nød til at vise dig noget mere kode :)

Først har jeg en komando, som fremkalder funktionen hvor du kan tage faktualiteten af flere tal:

if(kommandou.equals("1")){
                                        System.out.println("\n\n-FAKULTET AF FLERE TAL-");
                                        System.out.println("\nV‘lg tal der skal faktualisers, når sidste tal er indtastet, skriv da blot 0:");

                                        talvalg = true;

                                        do{
                                            int tal = Keyboard.readInt();
                                            if(tal==0){talvalg = false;}
                                        } while(talvalg == true);

                                            // de tal vi vil have beregnet faklultet for
                                            int[] in = { 1, 2, 3, 4, 5, 10, 1 };
                                            // vi allokerer plads til resultater
                                            int[] out = new int[in.length];
                                            // beregn
                                            Fac2.fac(in, out);
                                            // udskriv
                                            for(int i = 0; i < out.length; i++) {
                                            System.out.println(out[i]);
                                            }

                            }
Jeg har så en klasse ved navn Fak2, som udregner for mig.

Det er så denne linie: int[] in = { 1, 2, 3, 4, 5, 10, 1 }; hvor jeg selv ønsker at indsætte tallene.
Avatar billede europe Nybegynder
01. december 2004 - 19:09 #9
Okay - Hurtigt spørgsmål.
Hvis jeg forstå det rigtig så er der fra brugerens side blevet tastet 1,2,3,4,5,10,1
Er det rigtig ?
Og det skal helst være sådan at brugeren selv kan bestemme hvor mange tal der skal tastes ind eller må det godt være et fast antal ?
Avatar billede kalp Novice
01. december 2004 - 19:11 #10
int[] arr = new int[10];

System.out.print("Indtast et tal ")
int tal = Keyboard.readInt();
int counter = 0;
while(counter < arr.length)
{
arr[counter] = tal;
counter++;
System.out.print("Indtast et tal ")
tal = Keyboard.readInt();
}
Avatar billede kalp Novice
01. december 2004 - 19:13 #11
mit eksempel vil spørge om "Indtast et tal" ti gange... og hver gang vil det tal blive sat ind i din arr på en plads afhængig af hvad counter siger
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:14 #12
europe: Præcis :)
Avatar billede _carsten Nybegynder
01. december 2004 - 19:16 #13
Et forslag

    public void arrayTest() {
        String svar = JOptionPane.showInputDialog("Skriv antal elementer som arrayet skal indeholde ?", 10);
       
        if(svar == null)
            return;
       
        int[] ar = new int[ Integer.parseInt(svar) ];
       
        for(int i = 0; i < ar.length; i++){
            String value = JOptionPane.showInputDialog("Skriv værdien som plads " + i + " i arrayet skal indeholde.");
            if(value == null)
                break;
            else
                ar[i] = Integer.parseInt(value);
        }
       
        for(int i = 0; i < ar.length; i++){
            System.out.println("Værdien på plads " + i + " er: " + ar[i]);
        }
    }
Avatar billede kalp Novice
01. december 2004 - 19:19 #14
mads for at skrive til et array skal du finde ud af hvilken plads i det du vil skrive til.. et array er jo en liste.

Din array på 10 pladser vil se sådan her ud

0|plads1
1|plads2
2|plads3
3|plads4
4|plads5
5|plads6
6|plads7
7|plads8
8|plads9
9|plads10

for at skrive til plads 1 skal du skrive

arr[0]

da 0 er det første index i din array. for at skrive til plads 2

arr[1]

osv

hvis du vil sætte værdien i plads 1 til 7 fx skal du bare sige

arr[0] = 7;
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:20 #15
Ja men det skulle gerne være fuldt dynamisk. Nogle gange er der 3 værdier andre gange 432212
Avatar billede kalp Novice
01. december 2004 - 19:21 #16
så skal du bare bruge en ArrayList

og der hedder det

arr.length() for at få længden.. og for at vælge en plads skriver du

arr.get(indexnummeret);
Avatar billede kalp Novice
01. december 2004 - 19:24 #17
ArrayList er faktisk ikke helt dynamisk.. det er LinkedList tilgengæld...
Avatar billede europe Nybegynder
01. december 2004 - 19:24 #18
if(kommandou.equals("1")){
      System.out.println("\n\n-FAKULTET AF FLERE TAL-");
      System.out.println("\nV‘lg tal der skal faktualisers, når sidste tal er indtastet, skriv da blot 0:");
     
      talvalg = true;
      StringBuffer tmpBuffer = new StringBuffer();
      do{
        int tal = Keyboard.readInt();
        if(tal == 0) {
          talvalg == true;
        } else {
          tmpBuffer.append(1);
          tmpBuffer.append(",");
        }
      } while(talvalg == true);
      /*Færdig med at taste og har talene i en buffer separeret med komma*/
        String tmpArr[] = tmpBuffer.toString().split(","); //kan kun bruges i jdk 1.4+
        int[] in = new int[tmpArr.length];
        for(int i = 0;i<tmpArr.length;i++) {
          in[i] = Integer.parseInt(tmpArr[i]);
        }
         
        // vi allokerer plads til resultater
        int[] out = new int[in.length];
        // beregn
        Fac2.fac(in, out);
        // udskriv
        for(int i = 0; i < out.length; i++) {
          System.out.println(out[i]);
        }
    }
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:24 #19
Carsten: Jeg har får en fejl i linie 2.

Det jeg har gjort er, at jeg har smidt den op i toppen af koden, og tilføjet static.
Jeg så bare skrevet:
if(kommandou.equals("1")){
arrayTest();
}
Avatar billede _carsten Nybegynder
01. december 2004 - 19:27 #20
Har du husket ?
import javax.swing.*;
Avatar billede europe Nybegynder
01. december 2004 - 19:30 #21
Erstat lige
String tmpArr[] = tmpBuffer.toString().split(","); //kan kun bruges i jdk 1.4+
Med
String tmpArr[] = tmpBuffer.substring(0,tmpBuffer.length()-1).split(",");//.spilt("") kan kun bruges i jdk 1.4+

Dette er gjort for lige at slippe for det sidste komma....
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:30 #22
Europe: Der sker ingenting, jeg kan bare forsætte med at skrive tal.

For at gøre det lidt lettere, har jeg lagt det hele ud her:

www.mads1987.1go.dk/Program.zip
Avatar billede europe Nybegynder
01. december 2004 - 19:32 #23
ja det er mig ... damn
Erstat lige
if(tal == 0) {
          talvalg == true;
med

if(tal == 0) {
          talvalg == false;
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:35 #24
Som du måske kan se, virker det stadig ikke optimalt.
Avatar billede europe Nybegynder
01. december 2004 - 19:45 #25
Prøv lige med det her isted for det jeg havde lavet før..
do{
  tal = Keyboard.readInt();
  if(tal == 0) {                                     
    talvalg = false;                           
  } else {
    tmpBuffer.append(tal);                       
    tmpBuffer.append(",");
  }
} while(talvalg == true);
Avatar billede mads1987 Nybegynder
01. december 2004 - 19:52 #26
Jeg får 3 errors, hvis jeg bytter om.

De drejer sig alle sammen om "tal"
Avatar billede europe Nybegynder
01. december 2004 - 19:59 #27
dvs at hele kommadoen kommer til at se sådan ud.

if(kommandou.equals("1")){
  System.out.println("\n\n-FAKULTET AF FLERE TAL-");
  System.out.println("\nV‘lg tal der skal faktualisers, når sidste tal er indtastet, skriv da blot 0:");

  talvalg = true;
  StringBuffer tmpBuffer = new StringBuffer();
  do{
    int tal = Keyboard.readInt();
    if(tal == 0) {
      talvalg = false;
    } else {
      tmpBuffer.append(tal);
      tmpBuffer.append(",");
    }
  } while(talvalg == true);
  /*Færdig med at taste og har talene i en buffer separeret med komma*/
  String tmpArr[] = tmpBuffer.substring(0,tmpBuffer.length()-1).split(","); //kan kun bruges i jdk 1.4+
  int[] in = new int[tmpArr.length];
  for(int i = 0;i<tmpArr.length;i++) {                     
    in[i] = Integer.parseInt(tmpArr[i]);                       
  }                                           
  // vi allokerer plads til resultater       
  int[] out = new int[in.length];           
  // beregn
  Fac2.fac(in, out);
  // udskriv                       
  for(int i = 0; i < out.length; i++) {
    System.out.println(out[i]);
  }
}
Avatar billede mads1987 Nybegynder
01. december 2004 - 20:04 #28
Jubii :D Simpelthen fantastisk europe! Nu virker det!

Jeg mangler blot forklaring på et par linier:
StringBuffer tmpBuffer = new StringBuffer();
String tmpArr[] = tmpBuffer.substring(0,tmpBuffer.length()-1).split(",");
Integer.parseInt(tmpArr[i]);

eller evt. link til en side hvor jeg kan læse om dem?
Avatar billede europe Nybegynder
01. december 2004 - 20:04 #29
Jeg kan se ja at der er sket noget for mig da jeg har kopieret det over til experten - men det sidste skulle gerne virke - det gør det iværtfald ved mig.
Avatar billede europe Nybegynder
01. december 2004 - 20:09 #30
Her er linket til api'en til jdk 1.4.2
http://java.sun.com/j2se/1.4.2/docs/api/

Men StringBuffer er en form for en streng men den kan bare laves om hele tiden hvilket gør den hurtigere at opere på end en String.
Ved at lave en tmpBuffer.substring(0,tmpBuffer.length()-1) får man en streng der indeholder det StringBufferen indeholder i det interval
.split(",") er en function der findes på en String object.
Integer.parseInt("") - laver en streng om til en primitiv int.

Er der flere spørgsmål må du endelig skrive.
Avatar billede europe Nybegynder
01. december 2004 - 22:04 #31
smider lige et svar hvis du ikke har mere
Avatar billede kalp Novice
04. december 2004 - 17:31 #32
mads1987:

hvis du synes jeg skal holde mig fra Java katogorien så kan jeg da gøre dig den tjeneste at holde mig fra dine spørgsmål...

/hygge
Avatar billede mads1987 Nybegynder
06. december 2004 - 15:25 #33
Mange tak for hjælpen europe! Det var skide godt du gad at blive ved!
Avatar billede mads1987 Nybegynder
06. december 2004 - 15:26 #34
Ved ikke hvad du mener kalp?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester