Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 4 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
06-10-2014, 08:03 PM (Ten post był ostatnio modyfikowany: 06-11-2014 04:35 PM przez lolo.)
Post: #1
Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Chciałem prosić o pomoc w udoskonaleniu kodu i poprawie jego błędów, gdyż w konsoli ciągle spamuje wiadomościami z pętli "do...while" po podaniu czegoś innego niż liczby całkowitej, np. litery, wyrazu, zdania, liczby zmiennopozycyjnej(z przecinkiem). Ten kod chciałem udoskonalić, aby po podaniu czegoś w miejscu na liczbę całkowitą:
1. dawał możliwość użytkownikowi ponownego sprowadzenia liczby do skutku
2. nie wywalał błędów i nie kończył programu, a w zamian wyświetlał jakiś komunikat proszący o ponowne podanie liczby
W tym kodzie mam na myśli wszystkie zmienne, do których można wprowadzić dane, czyli te w instrukcjach sterujących też.
import java.util.InputMismatchException;
import java.util.Scanner;
import static java.lang.Math.*;

public class TestWyjątków {
	public static void main(String args[]) {
		Scanner podaj = new Scanner(System.in);
		int wybor1 = 0;
		double liczba1, liczba2, pierwiastek, potega;
		System.out.println("Witaj w prostym kalkulatorze Smile\n");
		do {
		System.out.println("Wybierz jedną z liczb, aby wykonać odpowiednie działanie:");
		System.out.println("1 - dodać");
		System.out.println("2 - odjąć");
		System.out.println("3 - pomnożyć");
		System.out.println("4 - podzielić");
		System.out.println("5 - wyciągnąć pierwiastek");
		System.out.println("6 - podnieść do potęgi");
		try {
		wybor1 = podaj.nextInt();
		}catch(InputMismatchException e) {
			System.out.println("Podałeś złe znaki!");
		}
		if(wybor1==1) {
			System.out.println("Podaj pierwszą liczbę:");
			liczba1 = podaj.nextDouble();
			System.out.println("Podaj drugą liczbę:");
			liczba2 = podaj.nextDouble();
			System.out.println("1) Wynik: "+liczba1+" + "+liczba2+" = "+(liczba1+liczba2));
		}
		else if(wybor1==2) {
			System.out.println("Podaj pierwszą liczbę:");
			liczba1 = podaj.nextDouble();
			System.out.println("Podaj drugą liczbę:");
			liczba2 = podaj.nextDouble();
			System.out.println("2) Wynik: "+liczba1+" - "+liczba2+" = "+(liczba1-liczba2));
		}
		else if(wybor1==3) {
			System.out.println("Podaj pierwszą liczbę:");
			liczba1 = podaj.nextDouble();
			System.out.println("Podaj drugą liczbę:");
			liczba2 = podaj.nextDouble();
			System.out.println("3) Wynik: "+liczba1+" * "+liczba2+" = "+(liczba1*liczba2));
		}
		else if(wybor1==4) {
			System.out.println("Podaj pierwszą liczbę:");
			liczba1 = podaj.nextDouble();
			System.out.println("Podaj drugą liczbę:");
			liczba2 = podaj.nextDouble();
			System.out.println("1) Wynik: "+liczba1+" + "+liczba2+" = "+(liczba1+liczba2));
		}
		else if(wybor1==5) {
			System.out.println("Podaj liczbę:");
			liczba1 = podaj.nextDouble();
			pierwiastek = sqrt(liczba1);
			System.out.println("5) Wynik: "+liczba1+" = "+(pierwiastek));
		}
		else if(wybor1==6) {
			System.out.println("Podaj pierwszą liczbę:");
			liczba1 = podaj.nextDouble();
			System.out.println("Podaj drugą liczbę:");
			liczba2 = podaj.nextDouble();
			potega = pow(liczba1, liczba2);
			System.out.println("6) Wynik: "+liczba1+" ^"+liczba2+" = "+(potega));
		}
		else
			System.out.println("BŁĄD! Nie ma takiej opcji! \nSpróbuj ponownie!\n");
		}while(wybor1!=6);
	}
}

Edit: Proszę używać tagu [shcode=java] do umieszczania kodów programu.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
06-11-2014, 05:26 PM (Ten post był ostatnio modyfikowany: 06-11-2014 05:27 PM przez lolo.)
Post: #2
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Proponuje taką małą zmianę by użyć zamiast funkcji nextInt(), użyć nextLine() i otrzymaną wartość rzutować na int'a i wtedy obsługiwać wyjątek java.lang.NumberFormatException.

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
06-15-2014, 04:30 PM
Post: #3
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Wiem, o co chodzi, ale nie wiem jak to zapisać Undecided. Mógłbym prosić o kod, w którym po przeanalizowaniu zobaczę, co źle robiłem?
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
06-15-2014, 05:05 PM
Post: #4
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Spróbuj tego:
 try {
                wybor1 = Integer.parseInt(podaj.nextLine());
            }catch(java.lang.NumberFormatException e){
                System.out.println("Podałeś złe\nSpróbój raz jeszcze");
            }

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
08-07-2014, 08:28 AM (Ten post był ostatnio modyfikowany: 08-07-2014 08:31 AM przez aleksanderwiel.)
Post: #5
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Przepraszam, że trochę zwlekałem, ale nie mogłem znaleźć tego na forum i ogólnie trochę mało czasu miałem, a potem w ogóle o tym zapomniałem. Odnośnie programu mam jeszcze jeden - nie wiem, czy można tak powiedzieć, ale błąd? Chodzi mi o wynik działania, bo dobrze, że nie ma błędów związanych w wyjątkami, które zatrzymują działanie programu, ale za to jest takie dziwne coś:
1) Wynik: -1.11111111111111117E18 + -1.1111111111111112E41 = -1.1111111111111112E41

Nie rozumiem, o co tu chodzi z tym "E"? I jeszcze jedno: Dlaczego trzeba było tu użyć klasy osłonowej w sensie "parseInt", dobrze mówię "klasa osłonowa"?
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
08-07-2014, 08:53 AM
Post: #6
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
1.To jest notacja naukowa do przedstawiania dużych liczb. Odczytuje się tak, że to co jest przed E mnoży się przez 10 do potęgi tego co jest po E (pewnie nie jest to zbyt jasne wytłumaczenie ale poniższy przykład powinien lepiej to wyjaśnić)
Mamy np. liczbę:
2.21E21 to znaczy tyle, że jest to 2.21*10^21
2.Metoda parseInt jest po to by to co się otrzyma od użytkownika rzutować ze Stringa na inta.

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
10-25-2014, 10:38 PM (Ten post był ostatnio modyfikowany: 10-25-2014 10:39 PM przez aleksanderwiel.)
Post: #7
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Dzięki za pomoc. Czym dłużej w tym siedzę to tym bardziej ogarniam, co do czego Big Grin . Wypożyczyłem sobie też fajną książkę Herberta Schildta "Programowanie Java 2". Wiem... Może i stare wydanie Javy, ale nadal jest aktualne i można się z niej dużo dowiedzieć. A jak będę miał jeszcze jakiś problem, z którym sobie sam nie poradzę to wasza strona jest na pierwszym miejscu Smile
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
10-26-2014, 05:21 PM
Post: #8
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
A tak w ogóle to czemu nie mogę napisać nowego tematu? Czy to forum jest już nieaktywne, bo ja liczyłem na waszą pomoc? Sad
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
10-26-2014, 05:52 PM (Ten post był ostatnio modyfikowany: 10-26-2014 05:53 PM przez lolo.)
Post: #9
RE: Proźba o pomoc w udoskonaleniu kodu i poprawie jego błędów
Zablokowana jest tylko możliwość tworzenia nowych wątków w dziale JavaStart, wątki z pytaniami powinieneś zakładać w Ogólnie o Javie

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości