Toon posts:

[JAVA] Rij waarden vanaf het toetsenbord inlezen

Pagina: 1
Acties:

Verwijderd

Topicstarter
15 februari heb ik het AMBI HP 1 examen, dus ik ben druk aan het studeren.
Bij het examen horen een Input (afgeleid van BufferedReader) en een Output library

De vraag gaat over de Input library.
Als ik een rij waarden vanaf een toetsenbord wil inlezen, dan wil ik het doen met de volgende loop:
Java
code:
1
2
3
4
5
6
7
int r=0;
Input inp=new Input();
r=inp.readInt();

while (inp.eof()==false)
    r+=inp.readInt();
//post: r=(Si : inp.eof()==false : inp.readInt())

Maar dit werkt niet, als de eerste invoerrij is ingelezen, wordt readInt() aangeroepen en wordt er vervolgens weer een invoerrij ingelezen (zonder dat eof() true terug geeft). Hoe kan ik dit loopje zo maken dat wel na de eerste invoerrij gestopt wordt :?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik ken dat Input-geval niet en je vraag is ook een beetje onduidelijk. Waarschijnlijk moet je bij elke readInt elke keer 1 integer invullen. Volgens mij wil jij 1 regel lezen met meerdere integers (gescheiden door bv een spatie) en daar de som van nemen. Als dat zo is, dan kan je die readInt natuurlijk niet direct met de standaard input gebruiken.

Je kan het bijvoorbeeld zo doen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.*;
import java.util.*;

public class ReadInt {
    public static void main(String[] args) {
        try {
            System.out.println("Give me some integers:");
        
            BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
            String line = input.readLine();
            
            StringTokenizer st = new StringTokenizer(line);
            
            int sum = 0;
            while (st.hasMoreTokens())
                sum += Integer.parseInt(st.nextToken());
            System.out.println("The sum of these integers is: " + sum);
                
        }
        catch (Exception e){
                throw new RuntimeException(e);
        }
    }
}

[edit]
En als je met de tijd mee wilt gaan doe je dit:
Java:
12
13
14
15
16
            String[] integers = line.split("\\s");
             
            int sum = 0; 
            for (int i = 0; i < integers.length; i++)
                sum += Integer.parseInt(integers[i]);


Miisschien is het ook mogelijk een StringReader om de line te zetten en die mee te geven aan jouw Input-library.

[ Voor 17% gewijzigd door Daos op 07-01-2006 17:55 ]


  • DroogKloot
  • Registratie: Februari 2001
  • Niet online

DroogKloot

depenisvanjezus

BufferedReader heef zelf geen eof() methode (dat zou bij streams afkomstig van het toetsenbord ook nergens op slaan), dus je zult in de API van die Input class moeten kijken wanneer het ding true hoort terug te geven.

[ Voor 24% gewijzigd door DroogKloot op 07-01-2006 17:42 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Gebruik liever String.split() in plaats van StringTokenizer. Het gebruik ervan is 'discouraged' volgens de API.

Wie trösten wir uns, die Mörder aller Mörder?


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Beetje onduidelijk wat je Input/Output library kan, maar:
Heb je naast een EOF (end of file) ook een EOL (end of line) tot je beschikking?
En moet je het perse met inp.readInt() doen of heb je ook een inp.readChar() tot je beschikking?

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Verwijderd

Topicstarter
Het lijkt er op dat eof() alleen voor files is
Binnenkort wil ik een examentraing gaan volgen, dan ga ik vragen hoe er op het examen mee om gegaan wordt. (ik wil me nu even alleen tot het examen beperken).
Stel dat er gelezen moet worden tot een niet numeriek teken, dan is het natuurlijk simpel

Verwijderd

Topicstarter
Ik heb toch een redelijk simpele oplossing gevonden voor het 'probleem' waarbij ik alleen gebruik hoef te maken van de Input library. De oplossing is:
code:
1
2
3
4
5
6
7
8
Input inp = new Input();
char c=0;
int val=0;

while (c!='\r')
{   val = inp.readInt();
    c= (char) inp.read();
}

Na elk getal volgt een spatie. Deze spatie wordt door read() gelezen om te checken op carrige return.
Pagina: 1