import java.util.Scanner;
public class Cajero   {
	
	protected int dnisearch;
	
	protected Cliente[] clientes = new Cliente[2];
	
	
	public static void main(String[] args) {
		int i;
		int valor;
		Cajero ca = new Cajero();
				
		for (i=0;i<=1;i++)
		{
		ca.clientes[i] = new Cliente();
		System.out.println("Ingrese Cliente, DNI y Saldo");
		ca.clientes[i].setData();
		
		
		
		
		}
		System.out.println("ingrese dni para obtener saldo");
		valor=ca.getSaldo();
		
		if (valor != 0)
		System.out.println("el saldo es "+valor);
		else
		System.out.println("No se encontro el Cliente");
		
	}
	public int getSaldo ()
	
	{
		Scanner s = new Scanner(System.in);
		Cajero ca = new Cajero();
		dnisearch = s.nextInt();
		
		int k;
		for (k=0;k<=1;k++)
		{
			if ( dnisearch == ca.clientes[k].dni )
				return (ca.clientes[k].saldo);
			else
				return 0;
			
				
					
		}
	
		
	}
}porque tengo ke definir 2 veces esto: Cajero ca = new Cajero(), intente ponerlo fuera de los metodos pero no funciona.
                for (i=0;i<=1;i++)
                       
                {
                        if (clientes[i].dni == dnis)
                                r=clientes[i].saldo;
                        else
                                r=0;
                               
                               
                       
                }
import java.util.*;
 
 
public class Cajero   {
 
       
       
       
        public Cliente[] clientes = new Cliente[2];
       
       
        public static void main(String[] args) {
                int valor;
                int dnisearch;
                int i;
                Scanner s = new Scanner(System.in);
                Cajero ca = new Cajero();
                               
                for (i=0;i<=1;i++)
                {
                ca.clientes[i] = new Cliente();
                System.out.println("Ingrese Cliente, DNI y Saldo");
                ca.clientes[i].setData();
                       
                }
               
       
               
                for (i=0;i<=1;i++)//compruebo q los datos estan bien ingresados
                {
                        System.out.println("Cliente: "+ca.clientes[i].nombre);
                        System.out.println("Saldo: "+ca.clientes[i].saldo);
                }
               
               
                System.out.println("ingrese dni para obtener saldo");
                dnisearch = s.nextInt();
               
                valor= ca.getSaldo(dnisearch);
                if (valor == -1)
                System.out.println("DNI no encontrado");
                else
                System.out.println("saldo "+valor);
 
        }
 
       
        public int getSaldo (int dnis)
       
        {
               
                int i;
                // r = -1 para indicar que no encontro el dni
                int r=-1;
                for (i=0;i<=1;i++)
                       
                {
                        if (clientes[i].dni == dnis)
                        {
                                r=clientes[i].saldo;
                                // Salir del for si encuentra el DNI
                                break;
                              }
// Eliminamos esto, que es innecesario
//                        else
//                                r=0;
                               
                               
                       
                }
       
                        return(r);             
                       
               
               
        }
}
Supongan que tengo ke leer un entero en el metodo getSaldo(), deberia definir como lo hice en el main Scanner s = new Scanner(System.in); y ahi justamente es donde radica mi duda, porqué lo tengo que definir de nuevo??? si ya lo he hecho en el main.