Gå til innhold

Hjelp med Scanner(system.in)


Anbefalte innlegg

Skrevet (endret)

Hallo,

 

Jeg er i startfasen når det gjelder Java (går INF1000 på UiO), men kan noe C++ fra før. I kveld begynte jeg å leke meg med funksjoner i Java, og tenkte å skrive en enkel kalkulator for å gjøre addisjon og subtraksjon.

 

Problemet er egentlig denne blokken her, i main:

 System.out.print("Tall 1: ");
 tall1 = sc.nextInt();

 System.out.print("Operator: ");
 test = sc.next();
 regneart = test.charAt(0);

 System.out.print("Tall 2: ");
 tall2 = sc.nextInt();

 int sum = beregn(tall1, tall2, regneart);

 

Jeg har veldig lyst til at bruker skal kunne skrive inn regnestykket som en setning (f.eks. "4+3"), og slippe å trykke return mellom tall1, operator og tall2. I C++ har jeg løst problemet på følgende måte:

 

cin >> tall1 >> regneart >> tall2;

int sum = beregnSvar(tall1, tall2, regneart);

 

C++varianten ser selvfølgelig mye mer oversiktlig ut for informatikere, og fungerer bedre for brukeren av programmet. Kan noen fortelle meg om det finnes en tilsvarende måte å gjøre dette i Java? Dette er ingen skoleoppgave, så jeg har ikke noe i mot det om noen løser problemet for meg :)

 

På forhånd takk!

Endret av Carana
Videoannonse
Annonse
Skrevet (endret)

en måte du kan gjøre det på er å spørre om hele regnestykket.

 

Scanner inn = new Scanner(system.in);
String regnestykke;
System.our.println("Skriv regnestykke:")
regnestykke = inn.nextLine();
String deler = regnestykke.split(" ");
int sum = beregn(deler[0], deler[2], deler[1]);

 

Nå må da beregn metoden kunne gjøre om strengene til heltall eller må du bruke metoder i klassen Integer for å skaffe deg heltall å sende med.

 

eller noe som dette.

Scanner inn = new Scanner(system.in);
System.out.print("Skriv regnestykke: "
int tall1 = inn.nextInt();
String regneart = inn.next();
int tall2 = inn.nextInt();
int sum = beregn(tall1, tall2, regneart);

 

Mange måter å løse det på.

 

de to eksemplene jeg har gitt funker bare vis man har mellomrom i mellom. skal du bare ha streng sammenhengende, så ville jeg sett på regex(illefall for så lette mattestykker).

Endret av xaco
Skrevet

Takk så mye for svar! Jeg fikk det til å fungere (uten mellomrom) på denne måten. Tungvint, men fungerende -- sikkert ikke noe jeg ville fått toppkarakter for, dog.

 

import java.util.*;
public class KalkFunction {
public static void main(String[] args) {

 Scanner sc = new Scanner(System.in);
 int tall1;
 int tall2 = 0;
 char regneart;
 String test;

 test = sc.nextLine();
 tall1 = Integer.parseInt(nextInteger(test.toCharArray(), 0));
 int curpos = nextInteger(test.toCharArray(), 0).length()+1;
 regneart = test.charAt(curpos-1);
 tall2 = Integer.parseInt(nextInteger(test.toCharArray(), curpos));
 System.out.println(tall1 + " " + regneart + " " + tall2);
 int sum = beregn(tall1, tall2, regneart);

 System.out.println("\n" + tall1 + " " + regneart + " " + tall2 + " = " + sum);

}

public static boolean isDigit(char in) {
 if(in >= 48 && in <= 57)
  return true;
 else if(in == 32)
  return true;
 else
  return false;
}

public static String nextInteger(char []in, int pos) {
 String integer = "";
 while(pos < in.length && isDigit(in[pos])) {
  integer += in[pos];
  pos++;
 }
 return integer;
}

public static int beregn(int tall1, int tall2, char regneart){
 int sum;

 if(regneart == '+'){
  sum = tall1 + tall2;
 }
 else{
  sum = tall1 - tall2;
 }

 return sum;

}
}

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...