Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 1143
Hei, jeg har et problem med et java program jeg prøver å lage.

Kode

import java.util.Scanner;

public class LANParty {
	public static void main (String args[]){
		Scanner input = new Scanner(System.in);
		int deltagerAntall;
		
		System.out.println("Hvor mange deltagere skal registreres?");	
		deltagerAntall = input.nextInt();
		++deltagerAntall;
		String navn[]=new String[deltagerAntall];
		String adresse[]=new String[deltagerAntall];
		int tlf[]=new int[deltagerAntall];
		String mail[]=new String[deltagerAntall];
		String skole[]=new String[deltagerAntall];
		int alder[]=new int[deltagerAntall];
		int myndig=18;
		String foresattNavn[]=new String[deltagerAntall];
		int foresattTLF[]=new int[deltagerAntall];
		
		for(int counter=1;counter<deltagerAntall;){
			System.out.println("Hva heter deltager " + counter + "?");
			navn[counter] = input.nextLine();
			System.out.println("Hva er adressen til deltager " + counter + "?");
			adresse[counter] = input.nextLine();
			System.out.println("Hva er tlf nummer til deltager " + counter + "?");
			tlf[counter] = input.nextInt();
			System.out.println("Hva er e-post adressen til deltager " + counter + "?");
			mail[counter] = input.nextLine();
			System.out.println("Hvilke skole går deltager " + counter + " på?");
			skole[counter] = input.nextLine();
			System.out.println("Hvor gammel er deltager " + counter + "?");
			alder[counter] = input.nextInt();
			
			if (alder[counter]<myndig){
				System.out.println("Hva er foresattes navn til deltager " + counter + "?");
				foresattNavn[counter] = input.nextLine();
				System.out.println("Hva er deltager " + counter + " sin foresatt sitt tlf nummer?");
				foresattTLF[counter] = input.nextInt();
			}else{
				
				
			}++counter;
		}for(int counter=1;counter<deltagerAntall;){
			System.out.println(navn[counter] + adresse[counter] + tlf[counter] + mail[counter] + skole[counter] + alder[counter] + foresattNavn[counter] + foresattTLF[counter]);
			++counter;	
		}
		
	}
}
Om du kjører det, vil du se at noen av spørsmålene vil bli hoppet over. Noen som vet hva problemet kan være?

Takk på forhånd!
Om du bytter ut nextLine() med next() i loopen fungerer det. Jeg tipper det blir litt krangling mellom println og nextLine() her, for det fungerte også om jeg byttet ut println med print.

Nå vet jeg ikke om dette er en skoleoppgave eller noe du faktisk skal benytte, men om sistnevnte er tilfelle ville jeg absolutt sett på ArrayList og opprettet et objekt per person. Kan komme med et eksempel om det er ønskelig.
Som ma10as er inne på, bør du opprette et objekt som har egenskapene du trenger, i dette tilfellet blir det en klasse som heter "Deltager".

Så kan du lage en array eller en arraylist (mer fleksibelt) der du legger til de deltagerne du lager... dette er den "riktige" måten å gjøre det på.

Kode

public class Deltaker
{
  private String navn;
  private String adresse;
  private int tlf;
  private String mail;
  private String skole;
  private int alder;
  private String foresattNavn;
  private int foresattTLF;
  private final int MYNDIG = 18;

  public Deltaker(String n, String adr, int t, String m, String s, int a, String fnm int ftlf)
  {
    Navn = n;
    adresse = adr;
    ...
  }

  public void setNavn(String n)
  {
    navn = n;
  }

  public String getNavn()
  {
    return navn;
  }
}
Orka ikke å fylle ut alle metoder og instansvariable, men du skjønner tegningen. Nå blir det opprettet objekter av hver deltaker.
F1sh's Avatar
Trådstarter
Hmm, får fortsatt problemer:

Kode

System.out.print("Hva heter deltager " + counter + "?");
			navn[counter] = input.next();
			System.out.print("Hva er adressen til deltager " + counter + "?");
			adresse[counter] = input.next();
			System.out.print("Hva er tlf nummer til deltager " + counter + "?");
			tlf[counter] = input.nextInt();
			System.out.print("Hva er e-post adressen til deltager " + counter + "?");
			mail[counter] = input.next();
			System.out.print("Hvilke skole går deltager " + counter + " på?");
			skole[counter] = input.next();
			System.out.print("Hvor gammel er deltager " + counter + "?");
			alder[counter] = input.nextInt();
Det går jo ikke å endre fra nextInt til next..
Den hopper over spørsmålene der jeg spør om numre..
Er ganske nybegynner innen jave, så tror jeg må orde det på den enkleste måten.
Lite kontroversiell
ticks's Avatar
Du må kjøre en input.nextLine() om du skal lese en String direkte etter du har lest en int. Dette skyldes måten java leser inn ints.

Når du skriver en integer og trykker enter vil java lese inn integeret på riktig måte, men en bieffekt av at du trykker enter er at det også produseres et linjeskift, som ikke blir lest inn av readInt(). Om du skriver alderen 20, er det faktisk "20\n" (\n er tegnet for linjeskift) som havner i inputstreamen. Siden du kun leser integeret vil det fremdeles være et linjeskift i strømmen din, som nextLine() leser inn. Dette fører til at programmet hopper over steget, og du får lagret en blank linje. Hvis du først kjører en input.readLine() vil du hoppe over dette ekstra linjeskiftet, og få lest inn dataen på riktig måte.

Som en bonus har jeg skrevet om koden din til å bruke en klasse Deltaker og en ArrayList til å lagre deltakerene. Dette er en bedre og mer fleksibel måte å kode på. Du behøver ikke å bruke det, men her har du i det minste koden:

http://pastebin.com/35ufb1xm

For å visualisere det enda litt bedre, kan vi se på følgende inputstrøm. Tegnet | viser i dette eksempelet hvor vi er i inputstrømmen.

Kode

|20\nticks\n
vi skriver "int alder = input.nextInt()" og får

Kode

20|\nticks\n
vi skriver "input.nextLine()" og får

Kode

20\n|ticks\n
vi skriver "adresse = input.nextLine()" igjen og får

Kode

20\nticks\n|
Sist endret av ticks; 5. juni 2011 kl. 16:52.
F1sh's Avatar
Trådstarter
Sitat av ticks Vis innlegg
Du må kjøre en input.nextLine() om du skal lese en String direkte etter du har lest en int. Dette skyldes måten java leser inn ints.

Når du skriver en integer og trykker enter vil java lese inn integeret på riktig måte, men en bieffekt av at du trykker enter er at det også produseres et linjeskift, som ikke blir lest inn av readInt(). Om du skriver alderen 20, er det faktisk "20\n" (\n er tegnet for linjeskift) som havner i inputstreamen. Siden du kun leser integeret vil det fremdeles være et linjeskift i strømmen din, som nextLine() leser inn. Dette fører til at programmet hopper over steget, og du får lagret en blank linje. Hvis du først kjører en input.readLine() vil du hoppe over dette ekstra linjeskiftet, og få lest inn dataen på riktig måte.

Som en bonus har jeg skrevet om koden din til å bruke en klasse Deltaker og en ArrayList til å lagre deltakerene. Dette er en bedre og mer fleksibel måte å kode på. Du behøver ikke å bruke det, men her har du i det minste koden:

http://pastebin.com/35ufb1xm

For å visualisere det enda litt bedre, kan vi se på følgende inputstrøm. Tegnet | viser i dette eksempelet hvor vi er i inputstrømmen.

Kode

|20\nticks\n
vi skriver "int alder = input.nextInt()" og får

Kode

20|\nticks\n
vi skriver "input.nextLine()" og får

Kode

20\n|ticks\n
vi skriver "adresse = input.nextLine()" igjen og får

Kode

20\nticks\n|
Vis hele sitatet...
Tusen takk for hjelpen! Nå fikk jeg det endelig til.