» »

[JAVA] help

[JAVA] help

gansta ::

Sem še začetnik v javi in imam naslednji problem, nekje vmes v programu imam naslednjo kodo:
String test = "danes";
  //read each character and record the frequencies
for (char c : test.toCharArray())
charFreqs[c]++;


se pravi vsak znak jemlje "posebaj"....jaz pa bi rad da mi recimo jemlje številke kot celota, recimo 0.6, potem 6, potem 7, za obdelavo naprej...
double[] test = new double[] {0.6 6 7};
//kako sedaj napišem to enako for zanko da mi bere iz double, kot posamezne cifre


lp, hvala
  • spremenil: gansta ()

mm1992 ::

//izpiše vsa števila iz tabele
double[] test = {0.6,6,7};
for(double d:test){
     System.out.print(d);
}


Loči elemente v tabeli z vejico

Zgodovina sprememb…

  • spremenil: mm1992 ()

gansta ::

mm1992 je izjavil:



//izpiše vsa števila iz tabele
double[] test = {0.6,6,7};
for(double d:test){
System.out.print(d);
}


Loči elemente v tabeli z vejico


Hmm, to vem vendar jaz rabim še "toCharArray(), da mi da v array; ne rabim izpisa

To mi seveda da error:

     
for(double c: test.toDoubleArray())
// System.out.print(c);
charFreqs[c]++;

//charFreq je pa samo konstanta..."meja"
int[] charFreqs = new int[2560];

Zgodovina sprememb…

  • spremenil: gansta ()

mm1992 ::

Aha..., potem pa bi bilo to najenostavnejše rešit z navadno for zanko ali pa da si umisliš nek counter.

gansta ::

Hmm bi znal kako pomagati?

mm1992 ::


int[] charFreqs = new int[2560];
//1. možnost
int i =0;
for(double c: test.toDoubleArray()){
charFreqs[i++]++;
}

//2.možnost 
double[] tabela = test.toDoubleArray();
for(int i=0;i<tabela.length;i++){
charFreqs[i]++;
}



Upam da bo kaj pomagalo

Zgodovina sprememb…

  • spremenil: mm1992 ()

gansta ::

Hmm pri obeh možnostih mi vrže error, imaš kak gmail, msn ->ZS

mm1992 ::

Imaš ZS

mkos2 ::

Pozdravljeni!
imam neko nalogo za nardit pa jo nikakor ne morem "Poštekati".


Robot se v skladu z uporabnikovimi ukazi giblje po pravokotni površini velikosti m × n polj:
Na začetku se robot nahaja v zgornjem levem kotu površine. Nato se v vsakem koraku premakne za določeno število polj v smeri levo, desno, navzgor ali navzdol. Smer premika je določena z ukazom. Začetna dolžina premika je enaka 1, vendar pa jo je možno kadarkoli nastaviti z ukazom.

Robot pozna sledeče ukaze:

o L: Premik v levo.

o R: Premik v desno.

o U: Premik navzgor.

o D: Premik navzdol.

o Števka med 1 in 9: Nastavitev trenutne dolžine premika (med 1 in 9). Robot se bo v vseh sledečih korakih premaknil za to dolžino, vse dokler je ne nastavimo ponovno.

Napišite program, ki prebere števili m in n (velikost površine) in zaporedje ukazov v obliki strnjenega niza, nato pa simulira premikanje robota po površini v skladu z ukazi. Nazadnje naj program za vsako polje izpiše, kolikokrat ga je robot obiskal. Primer (uporabnikov vnos je podčrtan):


Stevilo vrstic (m): 5
Stevilo stolpcev (n): 6
Zaporedje ukazov: RD3RD2UUL4DUD1L

1 1 2 1 1 0
0 1 4 1 2 0
0 0 3 0 2 0
0 0 3 0 2 0
0 1 2 0 1 0

Slika na desni strani seveda ni del izpisa, ampak je namenjena le za lažje razumevanje delovanja programa. Robotovi premiki so oštevilčeni z zaporednimi številkami. Robot se na začetku nahaja v zgornjem levem kotu, dolžina premika pa je enaka 1. V prvem koraku se robot premakne za eno polje v desno (ukaz R), v drugem pa za eno polje navzdol (ukaz D). Nato nastavimo dolžino premika na 3 (ukaz 3). V naslednjih dveh korakih se robot zato premakne za tri mesta v desno in navzdol (RD). Nato nastavimo dolžino premika na 2 in se za to dolžino dvakrat premaknemo navzgor in enkrat levo (UUL). In tako naprej. . .

Če je kakšen ukaz v zaporedju neveljaven (različen od znakov L, R, D, U in od števk), naj program izpiše ustrezno obvestilo in se takoj zaključi. Če kakšnega ukaza ni mogoče izpolniti, ker bi se robot moral premakniti čez rob površine, prav tako izpišite ustrezno obvestilo in zaključite program. Na primer:


Stevilo vrstic (m): 5
Stevilo stolpcev (n): 6
Zaporedje ukazov: 3RD4LD

Ukazov ni mogoce izpolniti, saj bi se robot moral popeljati cez rob povrsine.


V tem primeru težave povzroči predzadnji ukaz, torej L.
import java.*;
import java.util.*;
public class Seminar
{
 
  public static void main(String[] args){
	  
	  Scanner vnos=new Scanner (System.in);
	  System.out.println("Št vrstic: ");
	  int vrstica=vnos.nextInt();
	  System.out.println("Št stolpcev: ");
	  int stolpec=vnos.nextInt();
	  
	  System.out.println("Vnos smeri: ");
	  String smer=vnos.next();
	  
	  
	  int[][]tab=new int[vrstica][stolpec];
	  for(int vr=9;vr<tab.length;vr++){
		  for(int st=9;st<tab[vr].length;st++){ 
			  String D="D",L= "L",U = "U",R="R";
			  if(smer==D){
			tab[st]=new int [st+1];
		}else if(smer==L){
			tab[vr]=new int [vr-1];
		}else if(smer==U){
			tab[st]=new int [st-1];
		}else if(smer==R){
			tab[vr]=new int [vr+1];
		}
			  
			  
			  
			  
			  
			  
			  
			  
			  
			  System.out.println("Vrstic: "+tab.length);
			  System.out.println("Stolpec: "+tab[vr].length);
			  System.out.println("Stolpec2: "+tab[st].length);
			
		  }
		  }
	  }
  }

keworkian ::

Tole probaj, če ti bo delal fino.
   
           int x = 0;
            int y = 0;
            int iterator = 1;
            int[][] tab = new int[vrstica][stolpec];
            tab[x][y] += 1;
            for (int i = 0; i < ukaz.length; i++)
            {
                if (ukaz[i].IsDigit())
                {
                    iterator = Integer.parseInt(ukaz[i]) + 1;
                    continue;
                }

                switch (ukaz[i])
                {
                    case 'R': y += 1; break;
                    case 'L': y -= 1; break;
                    case 'U': x -= 1; break;
                    case 'D': x += 1; break;
                    default:
                        break;
                }

                if ((x >= 0 && y >= 0) && (x < vrstice && y < stolpci))
                {
                    tab[x][y] += iterator;
                }
                else
                { 
                    System.out.print("I cannot move there!");
                    Syste.exit(0);
                }
                iterator = 1;

Zgodovina sprememb…

mkos2 ::

8.vrstica -The method IsDigit() is undefined for the type String
tabela ukaz je pol 'R','D','U','L'
String[]ukaz={"D","U","L","R"};
14.vrstica mi tole nabija: Cannot switch on a value of type String. Only convertible int values or enum constants are permitted

Zgodovina sprememb…

  • spremenil: mkos2 ()

IceBoX ::

Očitno imaš v switch String. Switch lahko prejme le int ali char. Pa jaz bi tole raje naredil tako, da bi prebral tiste ukaze kot string, šel v for zanko (int i)ki bi šla od 0 do konca stringa (smer.length) in bi gledal z charAt(i)=='R' ali 'L'... Če se s katero ujema, naj pač naredi kot imaš zgoraj napisano.

keworkian ::

8.vrstica -The method IsDigit() is undefined for the type String

Castaj v char ane?
tabela ukaz je pol 'R','D','U','L'
String[]ukaz={"D","U","L","R"};

Ne ukaz je input, ki ga dobiš notri (po moji logiki) ampak tega nisem pisal, ker sem želel vzpodbuditi tvoje programerske sposobnosti.
14.vrstica mi tole nabija: Cannot switch on a value of type String. Only convertible int values or enum constants are permitted

Daj no poguglaj malo, vsaj malo!

Zgodovina sprememb…

mkos2 ::

Googlam neprestano, razmisljam kako bi vse to skp dal. Neki moram narest...do ju3 do 11h.

Zgodovina sprememb…

  • spremenil: mkos2 ()

keworkian ::

Saj imaš 3/4 že narejeno, kar ti manjka je da dodas input za vrstice,stolpec(če sploh rabiš to) in ukaz(RLD). Malo spremeniš mojo kodo in bo, ni tako težko.


Vredno ogleda ...

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

[Java] Prevajanje in šumniki v ubuntu

Oddelek: Programiranje
202483 (2100) mmaestro

Pomoč pri Domači nalogi

Oddelek: Programiranje
334531 (3379) Gandalfar
»

[Java] Zamenjat char v stringu na dolocenmu indeksu?

Oddelek: Programiranje
5897 (859) TipyTop
»

osnove v Javi - zvezdice

Oddelek: Programiranje
403528 (2750) Tutankhamun
»

[JAVA]Branje podatkov tipa int, double

Oddelek: Programiranje
123400 (3298) BaRtMaN

Več podobnih tem