horscik utworzono 14 maja 2009 utworzono 14 maja 2009 Witam, Mógłby mi ktoś wyjaśnić dlaczego po wykonaniu program pokazuje to co widnieje na zdjęciu. (kod również w jpg).
rafalluz komentarz 14 maja 2009 komentarz 14 maja 2009 Bo wyjeżdżasz poza zakres tablicy. W pętli ma być: i < tab.length
horscik komentarz 14 maja 2009 Autor komentarz 14 maja 2009 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 14 maja 2009 komentarz 14 maja 2009 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 19 maja 2009 Autor komentarz 19 maja 2009 (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 19 maja 2009 komentarz 19 maja 2009 A co to za szatański zapis: max = min = tab1[i][0]; ?
horscik komentarz 19 maja 2009 Autor komentarz 19 maja 2009 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 19 maja 2009 komentarz 19 maja 2009 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 19 maja 2009 Autor komentarz 19 maja 2009 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 19 maja 2009 komentarz 19 maja 2009 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 19 maja 2009 komentarz 19 maja 2009 No dobrze, ale co ty tam masz w tej tablicy ? Np. pod elementem tab1[0][0] co się kryje ?
horscik komentarz 19 maja 2009 Autor komentarz 19 maja 2009 (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 20 maja 2009 komentarz 20 maja 2009 (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.
horscik komentarz 1 czerwca 2009 Autor komentarz 1 czerwca 2009 (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 1 czerwca 2009 komentarz 1 czerwca 2009 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
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.