Przekazanie wartosci z jednej metody do drugiej metody w tej samej klasie

0
import java.io.File;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Scanner;


public class Uczacy {
	
	
	
	public Uczacy(){
	    
	    System.out.println("Podaj nazwe pliku uczacego?");
	    Scanner scan = new Scanner(System.in);
	    String fname = scan.nextLine();
	    
	    ArrayList<ArrayList<Float>> numbers = new ArrayList<ArrayList<Float>>();
        try
        (
            Scanner sc = new Scanner(new File(fname));
        )
        {
            while(sc.hasNextLine())
            {
                ArrayList<Float> oneRow = new ArrayList<Float>();
                Scanner scanner = new Scanner(sc.nextLine());
                scanner.useLocale(Locale.US);
                while(scanner.hasNextFloat())
                {
                    oneRow.add(scanner.nextFloat());
                }
                numbers.add(oneRow);
                System.out.println(oneRow);
                scanner.close();
                scan.close();
                }
            
            //System.out.println(numbers.get(1).get(1));
            
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        
     }

   
	
	public void printElement(przekazanie listy jako argument z powyzszej funkcji, int indeks1, indeks2

){

}

Mam taki problem, ze chcialbym przekazac liste z konstruktora do ponizszej metody, tak, aby operowac juz na listcie, ktora byla wczesniej wczytana. Chodzi mi o to, ze chcialbym podac tylko nazwe pliku jako argument.

3

Wyrzuć to z konstruktora:

ArrayList<ArrayList<Float>> numbers = new ArrayList<ArrayList<Float>>(); 

Tak sie zastanawiam czy dawanie to do konstruktora to dobry pomysł, ja bym to dała do jakiejś metody, ta całą logikę.

Tak z uwag innych:

  1. nazwy po angielsku
  2. Stosuj List zamiast ArrayList. stosujac interfejs zawsze to wygląda lepiej no i jest bardziej elastyczny program, czyli:
List<List<Float>> numbers = new ArrayList<ArrayList<Float>>(); 
  1. ten try catch mógłby łapać konkretny wyjątek, tzn. taki którego sie spodziewasz ewentualnie, łapanie wszystkiego jak leci to słaby pomysł.
0

Dobrze, poprawie ten wyjatek. Ale chodzi mi o to jak moge wykorzystac "numbers"
w metodzie printElement() z konstruktora.

import java.io.File;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Scanner;


public class Uczacy {
	
	
	
	public Uczacy(){
	    
	    System.out.println("Podaj nazwe pliku uczacego?");
	    Scanner scan = new Scanner(System.in);
	    String fname = scan.nextLine();
	    
	    ArrayList<ArrayList<Float>> numbers = new ArrayList<ArrayList<Float>>();
        try
        (
            Scanner sc = new Scanner(new File(fname));
        )
        {
            while(sc.hasNextLine())
            {
                ArrayList<Float> oneRow = new ArrayList<Float>();
                Scanner scanner = new Scanner(sc.nextLine());
                scanner.useLocale(Locale.US);
                while(scanner.hasNextFloat())
                {
                    oneRow.add(scanner.nextFloat());
                }
                numbers.add(oneRow);
                System.out.println(oneRow);
                scanner.close();
                scan.close();
                }
            
            //System.out.println(numbers.get(1).get(1));
            
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        
     }

   
	
	public void printElement(int indeks1, int indeks2){
	   
	        System.out.println(numbers.get(indeks1).get(indeks2));
          }
       
      }
 
0

Zrób z kolekcji liczb pole w klasie. Wtedy nie musisz niczego przekazywać, każda metoda widzi tę kolekcję.

public class Uczacy
{
    private ArrayList<ArrayList<Float>> numbers = new ArrayList<ArrayList<Float>>();
...

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