[JAVA] Problem z tablicą - nie wyświetla wyniku


(Zabijaka551) #1

Witam, robię zadanie z informatyki. Jednak nie chce ono się wykonać.

Wstawiam kod, powie mi ktoś, gdzie jest błąd?

http://wklej.to/cjyI7

Wyświetla mi się to:

http://scr.hu/2wxc/zwzja

 

Chcę by kod:

  1. Wyświetlał ilość wstawionych linii

  2. Wyświetlał maksymalną temperaturę w dniu

  3. Wyświetlał maksymalną temperaturę w całości

  4. Wyświetlał ilośc dni kiedy temperatura była poniżej zera

  5. kończył działanie po pustej linii


(Grzelix) #2

Na moje oko błąd jest w poniższym fragmencie. 

int ile=tempds.length;

...
	for (int i=0; i<=ile;i++){
		int a=Integer.parseInt(tempds[i]);

jeśli tablica ma N elementów i jest indeksowana od zera to ostatni element do jakiego możesz się odwołać jest N-1:

w instrukcji powinno zatem być:

for (int i=0; i<ile; i++){

EDIT: doczytałem definicje błędu i tak to tu jest błąd. Definicja mówi: błąd w linii 16. Próbowano odwołać się od elementu 3 w tablicy, który jest poza jej granicami. (podałeś 3 wartości i w tablicy są one zapisane w komórkach i indeksach kolejno 0, 1, 2).

 

Inne uwagi:

  1. Dlaczego jest tam użyta instrukcja 'while' (miała być instrukcja 'if')? Bo jeśli 'while' to przydała by się jakaś instrukcja która wpływa na warunek 'while' wewnątrz bloku tej instrukcji (może chodzi o linie 25, 26 ale utworzyłeś tam inną zmienną).

  2. linie 17, 18 ? Jakaś zaszłość historyczna?

  3. Postaraj się lepiej formatować kod. Jakieś puste linie dzielące logicznie metodę, instrukcje w osobnych liniach. Konsekwencja w tabulacji.


(Dimatheus) #3

javaa , zapoznaj się, proszę, z tym tematem i stroną, a następnie - korzystając z przycisku Edytuj (na dole pierwszego posta po prawej stronie) i opcji Użyj pełnego edytora - popraw tytuł wątku tak, by mówił konkretnie o problemie. Poprawnie zatytułowany wątek zwiększa szansę na uzyskanie szybkiej pomocy. Zignorowanie tej prośby będzie skutkować przeniesieniem tematu do kosza.

Pozdrawiam,

Dimatheus


(Zabijaka551) #4

Ok, poprawiłem to, szczerze, to zapomniałem o numeracji od zera, poprawiłem też kolejne błędy.

Jednak teraz występuje błąd

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Syntax error on token ";", PrimitiveType expected after this token

	at temp.main(temp.java:29)

Kod wygląda teraz następująco:

import java.util.*;
public class temp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

Scanner czyt=new Scanner (System.in);
String pierwsza=czyt.nextLine();
String [] tempds=pierwsza.split(" ");
int ile=tempds.length;
int iledni=0, maxall=0,dni0=0;

for (;ile>1;){
	iledni++;
	int maxd=-100,srednia=0;
	
	for (int i=0; i<ile;i++){
		int a=Integer.parseInt(tempds[i]);
		int [] tempd=new int [ile];
		tempd[i]=a;
		srednia=srednia+a;
		
		if (maxd<a){maxd=a;}}
	System.out.println("Maksymalna temperatura dnia: "+maxd);
	
	if(maxall<maxd){maxall=maxd;}
	maxd=0;
	if (srednia/ile<0){dni0++;}
 pierwsza=czyt.nextLine();
	[] tempds=pierwsza.split(" ");
	ile=tempds.length;
	}
System.out.println("Wczytanych dni: "+iledni);
System.out.println("Maksymalna temperatura: "+maxall);
	System.out.println("Liczba dni ze średnią temperaturą mniejszą od zera: "+dni0);
	


	}

}

(Grzelix) #5

nie: 

[] tempds=pierwsza.split(" ");

tylko:

tempds=pierwsza.split(" ");

korzystasz z jakiegoś IDE? Nie podkreśla, podpowiada ci błędów?


(Zabijaka551) #6

podkreślił mi tylko średnik tu

pierwsza=czyt.nextLine();

Kod działa, tylko teraz nie chce zacząć pętli od nowa, po wprowadzeniu drugiego wiersza danych.

Koszystam z eclipse


(Grzelix) #7

Poprawiłeś swój kod zgodnie z moim poprzednim postem?

 

Zainstalowałem u siebie eclipse i u mnie działa bez błędnie taki kod: 

import java.util.*;

public class temp {

	public static void main(String[] args) {
		Scanner czyt = new Scanner(System.in);
		
		String pierwsza = czyt.nextLine();
		String[] tempds = pierwsza.split(" ");
		int ile = tempds.length;
		int iledni = 0, maxall = 0, dni0 = 0;

		for (; ile > 1;) {
			iledni++;
			int maxd = -100, srednia = 0;

			for (int i = 0; i < ile; i++) {
				int a = Integer.parseInt(tempds[i]);
				int[] tempd = new int[ile];
				tempd[i] = a;
				srednia = srednia + a;

				if (maxd < a) {
					maxd = a;
				}
			}
			System.out.println("Maksymalna temperatura dnia: " + maxd);

			if (maxall < maxd) {
				maxall = maxd;
			}
			maxd = 0;
			if (srednia / ile < 0) {
				dni0++;
			}
			pierwsza = czyt.nextLine();
			tempds = pierwsza.split(" ");
			ile = tempds.length;
		}
		System.out.println("Wczytanych dni: " + iledni);
		System.out.println("Maksymalna temperatura: " + maxall);
		System.out
				.println("Liczba dni ze średnią temperaturą mniejszą od zera: "
						+ dni0);
		czyt.close();

	}

}

(Zabijaka551) #8

Dziękuję, akurat chwilę wcześniej sam doszedłem do kolejnego małego błędu. Sprawa rozwiązana :slight_smile: