Pierwszy program w javie coś robiący

0

Witam, javy uczę się od jakiegoś czasu ale ostatnio miałem przerwę. Ucząc się javy zastanawiałem się czy bez znajomości jee można coś przydatnego. Postanowiłem napisać program, który od pewnego czasu chodził mi po głowie a mianowicie zadywanie liczb z jakiegoś przedziału, ot o i program:

import java.util.Random;
import java.util.Scanner;

public class Nauka {
	static int liczba;
	static int liczbaDoZgadnięcia; 
	private static Scanner sc;
	
	public void  znajdzDanaLiczbe(){
		
		switch (liczba) {
		case 1:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 2:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 3:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 4:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 5:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 6:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 7:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 8:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 9:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;
		case 10:
			if(liczba == liczbaDoZgadnięcia){
			System.out.println("Zgadłeś, podana liczba to " + liczba);
			}
			else if(liczba != liczbaDoZgadnięcia){
				System.out.println("Niezgadłeś! Spróbuj jeszcze raz");
			}
			break;

		default:
			if(liczba >10 || liczba < 1){
			System.out.println("Podałeś liczbę z poza zakresu");
			}
			break;
		}
	}

	public static void main(String[] args) {
		Random rand = new Random();
		liczbaDoZgadnięcia = rand.nextInt(10);
		Nauka ob1 = new Nauka();
		sc = new Scanner(System.in);
		System.out.println("Podaj liczbę z zakresu 1-10: ");
		liczba = sc.nextInt();
		ob1.znajdzDanaLiczbe();
		System.out.println("Dzięki za udział w naszej zabawie"); 

Może nie wszystko jest jakoś sensownie nazwane ale to mój pierwszy raz i pierwsze 100 linijek kodu.
Proszę o opinie i ocenę.

1

Jak będziesz miał do wylosowania liczby z przedziału 1-1000 to dodasz 1000 casów? Wyobraź sobie taką sytuację. Spójrz na przykład takiej gry: http://www.javaforstudents.co.uk/Practice/Number_guessing_game

Nazwy zmiennych staraj nazywać się po angielsku.

1

Rozumiem ,że się uczysz ,ale ten SWITCH jest tu strasznie na siłę. Kodu jest dziesięć razy więcej niż mogłoby być, dodatkowo występują straszne powtórzenia w kodzie (poczytaj o zasadzie DRY). Wystarczyło napisać :

if( someValue == secretValue ){
    // trafione!
} else {
   // pudło!
}

Staraj się od początku nazywać zmienna/nazwy metod po angielsku. Nabierzesz dobrego nawyku na przyszłość!
Dodatkowo zmienne:

static int liczba;
static int liczbaDoZgadnięcia; 

Dlaczego statyczne? Jeżeli tworzysz jakąś metodę to nie bój się przekazać jej jakiś argumentów ,których ona potrzebuje do działania.

// Moderatora proszę o usunięcie poprzedniego postu, wysłany omykłowo!

0

Dzięki za odpowiedzi, dlatego właśnie wrzuciłem to na forum żeby dowiedzieć sie opinie bardziej doświadczonych

0

Warto tego długaśnego Switcha zastapić pętlą while :)

0

Poprawnie wygląda to tak:

package com.learn.java;

import java.util.Scanner;

public class guessingNumber {

	public static void main(String[] args) {
		int number;
		int numberToGuess;
		Scanner sc = new Scanner(System.in);
		numberToGuess = (int)(Math.random()*99 + 1);
		System.out.println(numberToGuess);
		do{
			System.out.println("Podaj liczbę z przedziału od 1-100 ");
			number = sc.nextInt();
			if (number == numberToGuess) {
				System.out.println("Gratulacje zgadłeś !!!!");
			}
			else if(number < numberToGuess)
			{
				System.out.println("Podana liczba jesy mniejsza od szukanej. Spróbuj jeszcze raz");
			}
			else if(number > numberToGuess)
			{
				System.out.println("Podana liczba jest wieksza od szukaj. Spróbuj jeszcze raz");
			}
			
			
			
		}while(number != numberToGuess);
	}

} 

Zrobiłem to w switchu bo się w ogolę nie zastanowiłem jak to miało by wyglądać, a kod napisałem w ramach ćwiczenia switcha.
Oto kolejny programik w wersji ze stringiem.

package com.learn.java;

import java.util.Random;
import java.util.Scanner;

public class guessName {

	public static void main(String[] args) {
		String[] myNamesToGuess = {"Paweł","Łukasz","Damian","Jakub","Ryszard","Mariusz","Marian","Krzysztof"};
		int idx = new Random().nextInt(myNamesToGuess.length);
		String random = (myNamesToGuess[idx]);
		String guess;
		System.out.println(random);
		System.out.println("zaczynamy Zgadnij jak mam na imię? ");
		Scanner sc = new Scanner(System.in);
		
		do{
				guess = sc.nextLine();
				
				if(guess.equals(random))
				{
					System.out.println("Gratulacje trafiłeś, zagraj jeszcze raz ");
				}
				else
				{
					System.out.println("Spróbuj jeszcze raz ");
				}
		}while(guess != random);
		
	}

} 
0

Dlaczego w tym przykładzie z imionami wyświetlasz użytkownikowi imię, które należy odgadnąć? Tak, czy siak, możesz dodatkowo wyświetlać użytkownikowi, które litery z zaproponowanego przez niego imienia są wspólne z literami imienia będącego zagadką.

0

mógł by ktoś bardziej ogarnięty pokazać mi jak zamienić te programy na obiektowe

0

Co masz na myśli poprzez zamianę na "obiektowe"? Ten programy jest na tyle prosty, że nie bardzo da się go rozbić na jakieś mniejsze klasy.

0

Chodzi mi o to żeby zrobić z tego metodę i przekazać do niej losowaną liczbę i liczbę ze scannera bo mi przy ty wyskakuje błąd

0
package com.learn.java;

import java.util.Scanner;

public class guessingNumberMethod {
	
	
	void guessingMethod(int number, int numberToGuess)
	{
		
		
		do{
			if (number == numberToGuess) {
				System.out.println("Gratulacje zgadłeś !!!!");
			}
			else if(number < numberToGuess)
			{
				System.out.println("Podana liczba jesy mniejsza od szukanej. Spróbuj jeszcze raz");
			}
			else if(number > numberToGuess)
			{
				System.out.println("Podana liczba jest wieksza od szukaj. Spróbuj jeszcze raz");
			}
			
			
			
		}while(number != numberToGuess);
	}

	

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("Podaj liczbę z przedzialu 1-100");
		int numberToGuess = (int)(Math.random()*99 + 1);
		int number = sc.nextInt();
		System.out.println(numberToGuess);
		guessingNumberMethod ob1 = new guessingNumberMethod();
		ob1.guessingMethod(number, numberToGuess);
		
	}

} 

Po uruchomieniu i wpisaniu liczby wyskakuje pętal z jednego else ifa

0

Gdzie w tej pętli w metodzie

    void guessingMethod(int number, int numberToGuess) 

po nieudanej próbie użytkownika ponownie pobierasz liczbę od użytkownika? Skopiuj pętle do while z tego programu wcześniej gdzie masz taki fragment na początku:

System.out.println("Podaj liczbę z przedziału od 1-100 ");
number = sc.nextInt();

Ogólnie poczytaj o nazewnictwie klas i metod. Utworzyłbym nową klasę z metodą guessingMethod zamisat wrzucać to do głównej klasy zawierającej maina.

1 użytkowników online, w tym zalogowanych: 0, gości: 1