» »

Java - dva problema

Java - dva problema

RunoTheDog ::

Zdravo!

Pri pisanju svojega programa sem naletel na dva problema.

1.) Imam tabelo objektov, ki je deklarirana pod razredom Main in ima določila public static. Želim napisati metodo, ki bo tej tabeli nastavila velikost, vendar mi tega ne naredi.
public static Banana [] tabelaBanan;

 public static void ustvariTabeloIzbraneVelikosti(Banana[]tabela){
        Scanner sc = new Scanner(System.in);
        System.out.println("Vnesite velikost tabele: ");
        int velikost = sc.nextInt();
        tabela = new Banana[velikost];
    }


2.)Z dvema scannerjema želim prebrati eno številko (1.) in en string (2.). Tole ne deluje (javi mi "NoSuchElementException", stringa mi niti ne dovoli vnesti.):
Scanner sc = new Scanner(System.in);
       Scanner sc2 = new Scanner(System.in);
       System.out.println("Vnesite stevilo:");
       int bla = sc.nextInt();
       sc.close();
       System.out.println("Vnesite niz:");
       String bla1 = sc2.nextLine();
       System.out.print(bla);
       System.out.print(bla1);


Hvala vam že v naprej!

Spura ::

1. spremenis samo lokalno spremenjivko tabela, ne pa spremeljivke tabelaBanan. Zadnja vrstica bi morala biti tabelaBanan = new Banana[velikost] (sicer pa se ponavadi te stvari drugace dela)
2. Zakaj uporabljas 2 scannerja?

RunoTheDog ::

1.) Reseno. Hvala!

2.)Poskusil sem tudi samo z enim scannerjem. Tudi tole ne dela:
Scanner sc  = new Scanner(System.in);
       System.out.println("Vnesite stevilo: ");
       int nova = sc.nextInt();
       System.out.println("Vnesite niz: ");
       String niz = sc.nextLine();
       System.out.println(nova);
       System.out.println(niz);

Zgodovina sprememb…

Mesko89 ::

Tole bi moralo delat :)

Scanner sc  = new Scanner(System.in);
System.out.println("Vnesite stevilo: ");
int nova = Integer.parseInt(sc.nextLine());
System.out.println("Vnesite niz: ");
String niz = sc.nextLine();
System.out.println(nova);
System.out.println(niz);


Problem je, ker pri nextInt() Scanner ne skoči v naslednjo vrstico in tako ti potem pri nizu nextLine() pa samo skoči v naslednjo vrstico. Torej to bi se dalo tudi tako rešiti:

Scanner sc  = new Scanner(System.in);
System.out.println("Vnesite stevilo: ");
int nova = sc.nextInt();
// Tole enostavno skoči v naslednjo vrstico tako, da potem tvoj vnos deluje
sc.nextLine();
System.out.println("Vnesite niz: ");
String niz = sc.nextLine();
System.out.println(nova);
System.out.println(niz);

RunoTheDog ::

@dmp778: Hvala za tvoj odgovor.

Sem opazil, da ga nextInt nekaj lomi, zato sem od uporabnika najprej zahteval vse stringe, nato pa inte, vendar je to grdo.

Imam pa še eno vprašanje...imam ogromno kode, ki se mi ponavlja.
if(izbira==1){           
           int i = 0;
           while(tabela[i]!=null){
               if(tabela[i].<strong>ime</strong>.toLowerCase().startsWith(vnesenNiz.toLowerCase())){
                  mesta+=(i+1)+"."+" ";
               }
               i++;
           }
       }
 if(izbira==2){            
           int i = 0;
           while(tabela[i]!=null){
               if(tabela[i].<strong>priimek</strong>.toLowerCase().startsWith(vnesenNiz.toLowerCase())){
                  mesta+=(i+1)+"."+" ";
               }
               i++;
           }
       }

To ponavljajočo kodo bi rad odpravil z uporabo spremenljivke. Poudarjen tekst predstavlja argument razreda, ki bi ga rad zamenjal s to spremenljivko, da bi koda izgledala tako:

String spremenljivka=null;
if(izbira==1){
   spremenljivka = ime;
}else if(izbira==2){
   spremenljivka=priimek;
}
...
  int i = 0;
           while(tabela[i]!=null){
               if(tabela[i].<strong>spremenljivka</strong>.toLowerCase().startsWith(vnesenNiz.toLowerCase())){
                  mesta+=(i+1)+"."+" ";
               }
               i++;
           }

Problem je, ker je spremenljivka tipa String, morala pa bi biti atribut nekega mojega razreda. Ima kdo kakšno idejo?

LeQuack ::

En precej neoptimalen način bi bil tole:
int i = 0;
while(tabela[i]!=null){
	String spremenljivka=null;
	if(izbira==1){
	   spremenljivka = tabela[i]ime;
	}else if(izbira==2){
	   spremenljivka= tabela[i].priimek;
	}
	...
   
   if(spremenljivka.toLowerCase().startsWith(vnesenNiz.toLowerCase())){
	  mesta+=(i+1)+"."+" ";
   }
   i++;
}
Quack !

Zgodovina sprememb…

  • spremenil: LeQuack ()

Mesko89 ::

Ja kolikor vem se pri Javi do atributov ne da dinamično dostopat tako, da ti kr ostane samo kopiranje. Če pa kdo ki bolje pozna Javo in ve, da se da to narediti naj pove .... sem tudi že sam iskal kaj podobnega, vendar nisem našel :(

Genetic ::

tabela[i].getClass().getField(fieldName).getObject(tabela[i]), cast to String, toLower ,...

LeQuack ::

Da se z uporabo reflekcije (google java reflection), ampak je še bolj počasno kot moj primer zgoraj. No pri enostavnih in časovno kritičnih programih se to ne pozna toliko.

EDIT: Vidim, da me je Genetic že prehitel :)
Quack !

Genetic ::

Pocasna je verjetno samo metoda getField(fieldName). Ko ze imas enkrat Field instanco za doloceno ime, si jo shranis v hashMap<String, Field> in za vsako naslednjo uporabo vzames Field iz hashMape ter poklices field.getObject(obj).

LeQuack ::

Je za probat ;)
Quack !

Mesko89 ::

No tega pa nisem vedel :P Bo prav prišlo hvala :)

RunoTheDog ::

Ponovno sem naletel na nek podoben problem s scannerjem.
Scanner sc = new Scanner(System.in);
       System.out.println("Vnesite ime: ");
       String ime = sc.nextLine();
       System.out.println("Vnesite priimek: ");
       String priimek = sc.nextLine();
       System.out.println("Vnesite dan rojstva: ");
       int dan_rojstva = Integer.parseInt(sc.nextLine());


Pri vpisu priimka, se mi utripajoči kurzor ponovno nastavi na vpis priimka.

xardas ::

Zdravo,

v NetBeans hočem uvoziti jExcel API (Libraries -> Add jar/Folder -> jxl.jar), vendar mi vrne napako.

A sploh delam prav?

Hvala.

Bil je nek drugi problem. Sedaj dela :)

Zgodovina sprememb…

  • spremenilo: xardas ()

nightrage ::

Iz naslova http://www.findjar.com/jar/net.sourcefo... sem zdownlodal tvoj jar in ga importal v netbeansih brez problema. Kakšno napako ti javi?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Java začetnik - pravilno število

Oddelek: Programiranje
7940 (663) roko granata
»

Java metode;

Oddelek: Programiranje
354536 (3728) ragezor
»

[Java] Problem s Scanner-jem

Oddelek: Programiranje
92284 (2078) Zlatan
»

Java problem

Oddelek: Programiranje
201509 (1207) infiniteLoop
»

[Java] Kako filtrirati, katera števila lahko vpišeš?

Oddelek: Programiranje
181998 (1700) fiction

Več podobnih tem