x-kom hosting

[Java] Pytania

horscik
utworzono
utworzono

Witam,

Mógłby mi ktoś wyjaśnić dlaczego po wykonaniu program pokazuje to co widnieje na zdjęciu. (kod również w jpg).

main_Exception.JPG

post-30995-1242310896_thumb.jpg

rafalluz
komentarz
komentarz

Bo wyjeżdżasz poza zakres tablicy.

W pętli ma być:

i <  tab.length
horscik
komentarz
komentarz

Dzięki wielkie. Już ok, ale mam następny problem.

import java.io.*;public class KalendarzDzienny {	public static void main (String[] args) throws IOException {		BufferedReader wej = new BufferedReader (			new InputStreamReader (System.in));			int tab[] = {31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30};			int m, d, suma, dzien;			do {				System.out.println("Podaj nr miesiaca");				String sM = wej.readLine();				m = Integer.parseInt(sM);			}while (m > 12 || m < 1);			do{				System.out.println("i dzien ");				String sD = wej.readLine();				d = Integer.parseInt(sD);			}while (d > tab[(m-1)] || d < 1);			for (int i = 0; i >= m; i++) {				suma += tab[i];				}			dzien == suma + d;			System.out.println("Podany przez Ciebie dzien to " + dzien + " dzien w roku.");	}}

linijka

dzien == suma + d;

tutaj coś nie pasuje. Możliwe, że nie widzi wartości d, która została przypisana w pętli, a to jest poza nią, jeżeli tak to, jak można to obejść?!

rafalluz
komentarz
komentarz
dzien == suma + d;

To porównanie dzien z suma + d. Zwraca true, jak dzien i suma + d są równe.

Tobie chodzi raczej o:

dzien = suma + d;

Uważaj na podstawy.

horscik
komentarz
komentarz (edytowane)

No tak faktycznie są to wartości logiczne.

Trochę pozmieniałem, bo coś wcześniej po poprawkach i tak nie działało:

import java.io.*;public class KalendarzDzienny {	public static void main (String[] args) throws IOException {		BufferedReader wej = new BufferedReader (			new InputStreamReader (System.in));			int tab[] = {31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30};			int m, d, dzien;			int suma = 0; 			do {				System.out.println("Podaj nr miesiaca");				String sM = wej.readLine();				m = Integer.parseInt(sM);			}while (m > 12 || m < 1);			do{				System.out.println("i dzien ");				String sD = wej.readLine();				d = Integer.parseInt(sD);			}while (d > tab[(m-1)] || d < 1);			if (m > 1) {				int i = 0;				do{					suma += tab[i];					if ((i+1) == m){						dzien = suma + d;						System.out.println("Dzien ktory podales jest " + dzien + " dniem w roku.");					}					i++;				}while (i == m);			}			if (m == 1) {				System.out.println("Dzien ktory podales jest " + d + " dniem w roku");			}	}}

Program się kompiluje dobrze, ale problem jest przy

if ((i+1) == m){		dzien = suma + d;		System.out.println("Dzien ktory podales jest " + dzien + " dniem w roku.");}

Choć wydaje mi się, że jest ok. Ma może ktoś jakiś pomysł?

Problem polega na nie wyświetlaniu wyniku.

Jeszcze takie jedno pytanko mam:

przy funkcji losNext z Random jak określić przedział, np. [-20,20] lub [1,3]?!

EDIT:

Ok, dla zainteresowanych. W pierwszym problemie warunek while w IF powinien być (i < m).

Drugi problem np. (los.nextInt(20)+1); //jest to przedział od 1 do 20.

##############################################

Witam, proszę o pomoc. Mam problem z kodem:

	int i = 0;		int max, min;		max = min = tab1[i][0];		int b = 0, z = 0;			if (y > 1) {				do {					i++;					if (tab1[i][0] > max) {						b = i;						max = tab1[i][0];						}					if (tab1[i][0] < min) {						min = tab1[i][0];						z = i;						}				} while (i < y);				System.out.println("Najdrozszy towar to " + tab[b][0] + " ktory kosztuje " + max + "\nNajtanszy towar to " + tab[z][0] + " ktory kosztuje " + min);			}			else			System.out.println("Najdrozszy towar to " + tab[0][0] + " ktory kosztuje " + tab1[0][0] + "\nNajtanszy towar to " + tab[0][0] + " ktory kosztuje " + tab1[0][0]);

Konkretniej źle wyświetla wartość najtańszego produktu. tab[z][0] = null natomiast min = 0

Ma ktoś może jakiś pomysł, bądź wskazówkę?

z góry serdeczne dzięki

falcon1984
komentarz
komentarz

A co to za szatański zapis:

max = min = tab1[i][0];

?

horscik
komentarz
komentarz

we wcześniejszych kodach tab1 są przypisywane wartości dlatego, że jest to wcześniej zapętlone, a dokładniej to w pętli jest to:

System.out.print("\nPodaj cene netto ");	String sNetto = wej.readLine();	int netto = Integer.parseInt(sNetto);	tab1[y][0] = netto;

Jeżeli jest jeden produkt to wartość min i max jest równa tab1[y][0], a jeżeli więcej to wartości są porównywane do pierwszej wartości.

Np. cena jest równa 100, 50, 300,

min = max = tab[0][0] = 100, a potem if porównuje.

falcon1984
komentarz
komentarz

Spróbuj tak:

int max = tab1[i][0];int maxIndex = 0int min = tab1[i][0];int minIndex = 0for(int i = 1; i < tab1.length; i++){  if(tab1[i][0] > max){   max = tab1[i][0];   maxIndex = i;}	if(tab1[i][0] < min){	min = tab1[i][0];	minIndex = i; }System.out.println("Najdrozszy towar to " + tab[maxIndex][0] + " ktory kosztuje " + max + "\nNajtanszy towar to " + tab[minIndex][0] + " ktory kosztuje " + min);}
horscik
komentarz
komentarz

Musiałem to trochę zmodyfikować, żeby się skompilowało:

int w = 0;		int max = tab1[w][0];		int maxIndex = 0;		int min = tab1[w][0];		int minIndex = 0;		for(int i = 1; i < tab1.length; i++){ 			if(tab1[i][0] > max){				max = tab1[i][0];				maxIndex = i;				}   			if(tab1[i][0] < min){				min = tab1[i][0];				minIndex = i;			}		}		System.out.println("Najdrozszy towar to " + tab[maxIndex][0] + " ktory kosztuje " + max + "\nNajtanszy towar to " + tab[minIndex][0] + " ktory kosztuje " + min);

Efekt ten sam dla najdroższego poprawnie wyświetla, dla tab[minIndex][0] = null, a min = 0

W zasadzie to ten kod działa tak samo, jak ten co napisałem, jest prawie identyczny. :)

rafalluz
komentarz
komentarz

A po co jednocześnie zapisujesz max i maxIndex oraz min i minIndex? Wystarczą same indeksy, a wypisujesz potem:

System.out.println("Najdrozszy towar to " + tab[maxIndex][0] + " ktory kosztuje " + tab1[maxIndex][0] + "\nNajtanszy towar to " + tab[minIndex][0] + " ktory kosztuje " + tab1[minIndex][0]);

Sprawdź, co masz w tab[0][0].

falcon1984
komentarz
komentarz

No dobrze, ale co ty tam masz w tej tablicy ?

Np. pod elementem tab1[0][0] co się kryje ? :o

horscik
komentarz
komentarz (edytowane)

rafalluz

Szczerze to nie bardzo sobie wyobrażam, jakby to wyglądało tak, jak mówisz.

w tab mam (to jest nazwa):

System.out.print("\nPodaj nazwe ");String nazwa = wej.readLine();tab[y][0] = nazwa;

w tab1 (to jest cena):

System.out.print("\nPodaj cene netto ");String sNetto = wej.readLine();int netto = Integer.parseInt(sNetto);tab1[y][0] = netto;

to wszystko jest w pętli do/while, aby można było wpisać więcej towarów

Ok, już wiem, co masz na myśli:

int max = 0;int min = 0;for (int i = 0; i < tab1.length; i++) {	if (tab1[i][0] > tab1[max][0])		max = i;	if (tab1[i][0] < tab1[min][0])		min = i;}System.out.println("Najdrozszy towar to " + tab[max][0] + " ktory kosztuje " + tab1[max][0] + "\nNajtanszy towar to " + tab[min][0] + " ktory kosztuje " + tab1[min][0]);

ale problem nadal pozostaje. :(

rafalluz
komentarz
komentarz (edytowane)

Od jakiej wartości y zaczynasz wczytywanie? Czyli ile wynosi y przed pierwszym wywołaniem readLine()? Ma być 0, nie 1, bo takie mam podejrzenie.

  • 2 tygodnie później...
horscik
komentarz
komentarz (edytowane)

Tak, wiem, że numeracje tablic zaczyna się od 0, i tak mam int y = 0, żeby było wszystko czytelniejsze wrzucę całość.

import java.io.*;public class Magazyn {public static void main (String[] args) throws IOException {	BufferedReader wej = new BufferedReader (		new InputStreamReader (System.in));		int y = 0;		String t;		String tab[][] = new String [12][5]; 		int dodac1;				int tab1[][] = new int [12][1];		//Dodanie towaru		do {			System.out.print("\nPodaj nazwe ");			String nazwa = wej.readLine();			tab[y][0] = nazwa;			System.out.print("\nPodaj grupe ");			String grupa = wej.readLine();			tab[y][1] = grupa;			int stawka;			do {				System.out.println("\nPodaj stawke Vat \n\n\t 1. 0%\n\t 2. 7%\n\t 3. 22%");				t = wej.readLine();				stawka = Integer.parseInt(t);				String vat;				if (stawka == 1)					tab[y][2] = vat = "0%";				if (stawka == 2)					tab[y][2] = vat = "7%";				if (stawka == 3)					tab[y][2] = vat = "22%";				} while (stawka > 3);			System.out.print("\nPodaj cene netto ");			String sNetto = wej.readLine();			int netto = Integer.parseInt(sNetto);			tab1[y][0] = netto;			System.out.print("\nPodaj rok produkcji ");			String rok = wej.readLine();			tab[y][4] = rok;			y++;			do {				System.out.println("\nCzy dodac kolejny towar?\n\n\t1. TAK\n\t2. NIE"); 				t = wej.readLine();				dodac1 = Integer.parseInt(t);				} while (dodac1 > 2);		} while (y < 12 && dodac1 == 1);//Pokazanie najdroższego i najtańszego. Problem tylko przy najtańszym.		int max = 0;		int min = 0;		for (int i = 0; i < tab1.length; i++) {			if (tab1[i][0] > tab1[max][0])				max = i;			if (tab1[i][0] < tab1[min][0])				min = i;		}		System.out.println("Najdrozszy towar to " + tab[max][0] + " ktory kosztuje " + tab1[max][0] + "\nNajtanszy towar to " + tab[min][0] + " ktory kosztuje " + tab1[min][0]);	}}

Ok, widzę, że ciężko z tym problem. Dalej go nie rozwiązałem, ale i nikt wśród moich znajomych nie zna na to odpowiedzi, więc to zostawiam, jak na razie.

Mam kolejny problem. Muszą uporządkować liczby (dokładniej tablice, ale, jak na liczbach będę wiedział to z resztą to pikuś). Dane jest 11 liczb.

Jak znaleźć największą to no problem.

int max = tab[0];int a = 1;do{	if (max < tab[a])		max = tab[a];	a++;}while (a < 10);System.out.println(max);

Teraz myślę, żeby zrobić to tak. Znalazł największą i tą największą wyrzucić z tych tablic i szukać w reszcie największych i tak dalej. Czyli najlepiej byłoby to zapętlić. Tylko nie bardzo wiem, jak to zrobić.

Ma ktoś może jakiś pomysł?

z góry wielkie dzięki

falcon1984
komentarz
komentarz

Do sortowania tablicy int'ów to wystarczy że wywołasz:

Arrays.sort(tablica);

I wtedy masz już w tablicy elementy ułożone od najmniejszego do największego :D

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.