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);
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.
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.
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 ?
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(); }
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]); } }
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]); } }
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....
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);
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]); } }
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?
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.
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.
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.