Java Try catch Nybörjare Hjälp
Hej, (testar igen med rätt kod-taggar)
jag vill testa på lite Java och läser därför en extrakurs, inledande programmering. I senaste uppgiften lyckas jag inte applicera en felkontroll korrekt.
Meningen är att en användare ska mata in ett jämnt antal heltal och avsluta med q och då ska programmet hoppa vidare till nästa steg. Om man matar in en bokstav/decimaltal och trycker enter så ska programmet ignorera detta och låta användaren skriva in heltal. Om man matar in "bokstav(eller decimaltal)" 2 "bokstav(eller decimaltal)" 4 q så ska programmet ignorera bokstäverna och bara läsa in heltalen och gå vidare till nästa steg.
Jag har försökt flera olika try catch och do while men lyckas aldrig helt. Koden nedan ignorerar om användaren råkar skriva "bokstav" 2 4 q och gör uträkningen men går inte vidare till nästa steg.
Programmet kraschar om man matar in 2 "bokstav" 4.
Och matar man bara in en siffra så ignorerar programmet det men användaren kan inte mata in nya heltal.
Koden under den kan läsa in 2 4 q och går vidare i programmet men kraschar vid inmatning av bokstäver trots ett försök till try catch.
Jag förstår att ingen ska lös problemet åt mig, men är jag på väg åt rätt håll? Har jag försökt applicera try catch rätt? Jag har läst i boken och kolla tutorials men får inte till det..
Tacksam för en puff i rätt riktning!
(om någon variabel inte används så hänger den kvar från mina tester)
import java.io.*;
import java.util.InputMismatchException;
import java.util.Scanner;
public class TEESST
{
static Scanner scan= new Scanner(System.in);
//Deklarerar globala variabler
static int divider;
public static void main(String[] args)
{
//Deklarerar variabler
int radius=0, height=0;
float baseSurface;
//Ber användaren om inmatning
System.out.println("# Test av areametoderna ");
System.out.print(">");
System.out.println();
do {
if (scan.hasNextInt())//Anger villkor
{
//Läser in angivna värden
radius= scan.nextInt();
height=scan.nextInt();
//Omvandlar negativa tal till positiva vid behov
if (radius<0 || height<0)
{
radius = Math.abs(radius);
height = Math.abs(height);
}
//Skriver ut radie och höjd
System.out.print("r = "+ radius+ " ");
System.out.println("h = "+ height);
//Anropar metoder för att beräknar basyta
baseSurface = area((int) radius);
//Skriver ut basyta
System.out.printf("Basytans area: " + "%.2f", baseSurface);
System.out.println();
}//Avslutar while
else {
reply = scan.next();
}
} while (reply != "q");
if (reply.equals("q"))//Anger villkor för att gå vidare till bråktal
{
//Ber användaren om inmatning
System.out.println("# Test av bråktalsmetoderna ");
//Mer kod som inte behövs för detta exempel
}
}//Avslutar main-metoden
//Beräknar basytans area
public static float area(int rad)
{
float baseLocal = 0;
baseLocal = (float) (Math.PI*rad*rad);
return baseLocal;
}
}//Avslutar class-metoden
NY KOD som inte kan hantera bokstäver trots Try catch
import java.io.*;
import java.util.InputMismatchException;
import java.util.Scanner;
public class TEST
{
static Scanner scan= new Scanner(System.in);
//Deklarerar globala variabler
static int divider;
public static void main(String[] args)
{
//Deklarerar variabler
int radius=0, height=0;
float baseSurface;
//Ber användaren om inmatning
System.out.println("# Test av areametoderna och volymmetoderna ");
System.out.print(">");
System.out.println();
try {
while (scan.hasNextInt())//Anger villkor
{
//Läser in angivna värden
radius= scan.nextInt();
height=scan.nextInt();
//Omvandlar negativa tal till positiva vid behov
if (radius<0 || height<0)
{
radius = Math.abs(radius);
height = Math.abs(height);
}
//Skriver ut radie och höjd
System.out.print("r = "+ radius+ " ");
System.out.println("h = "+ height);
//Anropar metoder för att beräknar basyta, envelopeSurface och volym
baseSurface = area((int) radius);
//Skriver ut basyta
System.out.printf("Basytans area: " + "%.2f", baseSurface);
System.out.println();
}//Avslutar while
reply = scan.next();
}
catch(InputMismatchException e)
{
System.out.println("igen2");
}
catch(Exception e){
System.out.println("igen");
}
if (reply.equals("q"))//Anger villkor för att gå vidare till bråktal
{
//Ber användaren om inmatning
System.out.println("# Test av bråktalsmetoderna ");
//plus massa kod som inte behövs för denna fråga
}
}//Avslutar main-metoden
//Beräknar basytans area
public static float area(int rad)
{
float baseLocal = 0;
baseLocal = (float) (Math.PI*rad*rad);
return baseLocal;
}
}//Avslutar class-metoden