Java - dlaczego to nie działa?

0

Witam! Otóż mam sobie program, który ma coś liczyć (Nie potrafię tego wytłumaczyć, można to wyczytać z kodu)... I nie do końca poprawnie działa... Bo gdy np. Daje liczby 45 i 5 (To dzielenie)( ma mi znaleźć liczbę, przez którą trzeba podzielić/pomnożyć, żeby wyszła druga liczba). To wynik dostaje 8 :V. Lub gdy daje 40 i 5, to wynik dostaje 7. Itd... Sprawdzałem tylko do 35 i 5, bo już wiedziałem, że dalej też nie będzie działać... Dlaczego tak jest i czy da się temu zaradzić?

Tu kod:

import java.util.*;
import java.io.*;

public class Main {
	
	static long numbers[] = new long[10000000];
	static byte wybor;
	static Scanner scan = new Scanner(System.in);
	
	public static void main(String[] args)
	{
		for(int i=0; i<10000000; i++)
		{
				numbers[i] = i;
		}
		spr();
	}
	
	public static void error()
	{
		System.out.println("Blad! pierwsza liczba nie moze sie rownac drugiej liczbie!");
	}
	
	public static void spr()
	{
		try{
			Thread.sleep(3000);
		}
		catch(InterruptedException e){
			e.printStackTrace();
		}
		for(int i=0; i<100; i++)
		{
			System.out.println(" ");
		}
		System.out.println("Wybierz czy chcesz: ");
		System.out.println("1. Mnożyć ");
		System.out.println("2. Dzielić ");
		
		
		
		wybor = scan.nextByte();
		
		switch (wybor)
		{
			case 1:
			{
				for(int i=0; i<100; i++)
				{
					System.out.println(" ");
				}
				System.out.println("(Podaj pierwsza liczbe)");
				int userFirstNumber = scan.nextInt();
				System.out.println("(Podaj druga liczbe)");
				
				int userSecondNumber = scan.nextInt();
				for(int i = 0; i<10000000; i++)
					{
					if(userFirstNumber*numbers[i] == userSecondNumber)
					{
						System.out.println("Liczba przez którą się to mnozy, to: "+numbers[i]);
						spr();
						break;
					}
					else if(numbers[i]==9999999)
					{
						System.out.println("Przykro mi, nie znaleziono pasującej liczby");
						spr();
					}
			}
				break;
		}
			case 2:
			{
				for(int i=0; i<100; i++)
				{
					System.out.println(" ");
				}
				System.out.println("(Podaj pierwsza liczbe)");
				int userFirstNumber = scan.nextInt();
				System.out.println("(Podaj druga liczbe)");
				
				int userSecondNumber = scan.nextInt();
				
				
				if(userFirstNumber==userSecondNumber)
				{
					error();
				}
				
				for(int i = 1; i<10000000; i++)
					{
					if(userFirstNumber/numbers[i] == userSecondNumber)
					{
						System.out.println("Liczba przez którą się to dzieli, to: "+numbers[i]);
						spr();
						break;
					}
					else if(numbers[i]==9999999)
					{
						System.out.println("Przykro mi, nie znaleziono pasującej liczby");
						spr();
					}
				}
				break;

			}

		
		
		}
	}
}

1

Problem polega na tym, że 45 / 8 == 5,
chociaż 8*5 != 45.

Taki life z integerami w javie (i w każdym jezyku od C wywodzązcym się).
Zmień if(userFirstNumber/numbers[i] == userSecondNumber) na if(userSecondNumber*numbers[i] == userFirstNumber) i bedzie lepiej.

Poza tym cały ten program może wywoływać raka- ale to inna historia.

0

który ma coś liczyć (Nie potrafię tego wytłumaczyć, można to wyczytać z kodu).

no i tu masz problem, jezeli nie potrafisz czegos wytlumaczyc to znaczy ze sam tego nie rozumiesz. i rozumiem ze to Twoje poczatki z kodowaniem ale staraj opersowac na bardziej realnych przykladach. pozdro

1

Czasz umrzeć

0

Masz błąd w metodzie znajdowania tych liczb.

Kod:

System.out.printf("%d / %d = %s%n", 45, 5, 45/5);
System.out.printf("%d / %d = %s%n", 45, 8, 45/8);

https://ideone.com/Ljmqvr

Wyświetla:

45 / 5 = 9
45 / 8 = 5

Dzielisz całkowitoliczbowo, stąd znajdujesz wynik za wcześnie.
45 / 8 = 5.625, po obcięciu cyfr po przecinku daje 5.

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