blad przy funkcji skaner, pomocy

0

Dopiero sie ucze jezyka java, robie co moge, ale dzis napisałem taki o to program który nie działa i jak mam byc szczery to nie wiem dlaczego, dzieki za pomoc:

package programytreningowes84;
import java.util.Scanner;
public class tablice

{
	public static void main (String [] args)
	{
		skaner ();
		zrobtablice (S);
	}
	
	public static void zrobtablice (int i)
	{
		int [] t = new int [i];
		for (i = 0; i<=t.length; i++)
		{
			t [i] = i;
			System.out.println (i+1 + " element tablicy ma wartość " + i);
		}
	}

	public static void skaner ()
	{
		int S = 0;
		System.out.println ("podaj liczbe elementów tablicy ");
		Scanner in = new Scanner (System.in);
		S = in.nextInt ();
	}
}

a to mi wyrzuca konsola:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
S cannot be resolved to a variable

at programytreningowes84.tablice.main(tablice.java:9)

w teorii wiem że S traktuje jako String, ale nie wiem jak zrobic, zeby "S" wczytywalo sie z funkcji Scanner, którą napisałem osobno i S jest intem ;/ nie chce umieszczac tego w mainie, bo to bez sensu przy bardziej złożonych programach, stają sie nieczytelne

0

Wyrzuca Ci bład S cannot be resolved to a variable ponieważ w metodzie main nie masz nigdzie zadeklarowanej zmiennej S.
Zmienna S jest lokalna dla metody Skaner a więc

 public static void main (String [] args)
    {
        skaner ();
        zrobtablice (S);
    }

tu w ogóle nie jest widoczna.
Masz 2 możliwości.

  1. Albo przerzucić wywoływanie metody zrobtablice do metody Skaner po pobraniu zmiennej S.Czyli:
  public static void skaner ()
    {
        int S = 0;
        System.out.println ("podaj liczbe elementów tablicy ");
        Scanner in = new Scanner (System.in);
        S = in.nextInt ();
        zrobtablice(S);
    }
  1. Albo metoda Skaner zamiast void niech zwraca Int (return S):
 public static int skaner ()
    {
        int S = 0;
        System.out.println ("podaj liczbe elementów tablicy ");
        Scanner in = new Scanner (System.in);
        S = in.nextInt ();
        return S;
    }

Wówczas takie wywołanie: zrobtablice (skaner ()); w metodzie main będzie poprawne.

Ps. Popraw jeszcze pętle for która tworzy tablicę. Wywal znak równania w miejscu i<=t.length bo Ci się będzie sypało. Możesz też zacząć tablicę od i=1 chociaż to będzie gorsze rozwiązanie bo później będziesz musiał zawsze pamiętać że nie zacząłeś tam od 0 tylko 1.

0

świetne, ślicznie dziękuje :)

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