Zmienna int zaczynająca się od 0 pokazuje złą wartość

0

Witam użytkowników tego forum. Zaczynam dopiero swoją przygodę z Javą dlatego proszę o jak najwięcej uwag (nawet tych krytycznych :), dzięki którym coś będę mógł poprawić w kodzie.) Na chwilę obecną przerabiam zadanie z książki Introduction to Java D.Lianga która polega na wczytaniu numeru ISBN w postaci 10 cyfrowej (tj. d1d2d3d4d5d6d7d8d9d10). Ostatnia cyfra d10 jest sumą kontrolną która jest wyznaczana na podstawie tego wzoru:
(d1 X 1 + d2 X 2 + d3 X 3 + d4 X 4 + d5 X 5 + d6 X 6 + d7 X 7 + d8 X 8 + d9 X 9) % 11. Problem w tym że kod działa poprawnie dla liczb nie zaczynających się od "0" (np. 213031267). Ale przy inicjalizacji zmiennej temp zaczynającej się od "0" wyświetla zupełnie inną wartość (tj. dla 013031267 zmienna temp ma wartość 2896567). Pomoglibyście mi zrozumieć dlaczego tak się dzieje? Poniżej zamieszczam kod.

public class Test2 {
	public static void main(String[] args) {
		//Wczytywanie 9 cyfrowej zmeinnej ISBN-10
		int temp = 913601267;
		System.out.println(temp);
		
		//Sprawdzanie cyfra po cyfrze i sumowanie wartosci z moda (%)
		int digit = temp;
		int sum = 0;
		int n = 9; //liczba wprowadzonych cyfr ISBNu

		digit = digit / 10;

		while (digit > 0) {
			sum = sum + n * digit % 10;
			digit = digit / 10;
			n--;
		}

		//Sprawdzanie wartości ostatniej cyfry
		int last = sum % 11;
		System.out.print(temp);
		if (last == 0)
			System.out.print("x");
		else
			System.out.print(last);
	}

}

Dziękuję z góry za pomoc
Konrad
2

Dodanie zera powoduje ze jest to zapis w systemie osemkowym ;)

013031267 w osemkowym to 2896567 w dziesietnym

0

Faktycznie, z głowy mi to kompletnie wyleciało :) W książce był podany wcześniej jakiś przykład :) No nic dobrze, że zapytałem. Dzięki za szybką odpowiedz :) a jak wprowadzić liczbę tak żeby nie traktowało jej jako przelicznik w formacie ósemkowym?

Konrad

2

Tylko zero w kodzie jest wskazaniem systemu ósemkowego. Dla liczb wpisanych przez użytkownika początkowe zero jest ignorowane.

0

Bo jakby się nad tym zastanowić to na pierwszy rzut oka, można zrobić tak, że sprawdzi pierwszą cyfrę czy zaczyna się na zero. Jeżeli tak to można by było wydrukować najpierw "0" a potem podać wartości kolejnych cyfr używając konkatenacji (mam nadzieje że dobrze napisałem :) ). To takie moje obejście na szybko, ale czy w bibliotekach Javy nie ma może takiego rozwiązania które podaje cały ciąg liczb?
Konrad

0

Panowie Swr i *bogdans *dziękuję za odpowiedz. Faktycznie przy użyciu klasy Scanner zero jest ignorowane, ale przynajmniej kolejny ciąg liczb jest wyświetlany prawidłowo. Temat uważam za zamknięty. Dziękuję jeszcze raz za pomoc! :)

0

Nie rozumiem, skąd się bierze ten ISBN? Jeśli wprowadza użytkownik i czytasz metodą nextLong to żadnych zer na początku nie ma, musisz więc czytać metodą next i na wejściu masz String. Liczenie sumy kontrolnej musisz napisać dla Stringa.

0

a nie lepiej wczytać nr ISBN jako String od użytkownika, przerobić to na tablicę char[] i potem sprawdzać kolejne cyfry i obliczać sumę kontrolną?

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