Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Öne çıkan mesajlar

Mesaj tarihi:
javada array kullanarak bir diziyi tersten nasil yazabilirim?

asagida denedim ancak hata verdi cmd de. hata olarak scanner icin cannot find symbol yaziyor. bir de a.length() kisimlari icin yine cannot find symbol yaziyor. su scanner i dogru yere koyamadim sanirim. denedim ama cozemedim. a.length() i neden bulamiyor onu da anlamadim.

edit: uzerinde biraz daha oynadim. artik bu hatayi aliyorum:

non-static variable sc cannot be referenced from a static context

length hatasi hala ayni duruyor.




said:

import java.util.*;

public class Array1 {
Scanner sc = new Scanner (System.in);
static void invert (int[]a) {

for (int i=a.length()-1; i>=0; i--) {
System.out.println(a[i] + " ");
}

}

static int[] readArray () {

int len = sc.nextInt();
int[]a = new int[len];
for (int i=0; i<len; i++) {
a[i] = sc.nextInt();
return a;
}
}

static void printArray (int[] a) {
for (int i=0; i<a.length(); i++) {
System.out.println(a[i] + " ");
}
}

public static void main (String[]args) {
//Scanner sc = new Scanner (System.in);
int[]a = readArray();
printArray(a);
invert(a);
printArray(a);
}
}
Mesaj tarihi:
ilk olarak sen sen ol array donduren fonksiyon yazmaktan kacin. onun yerine bi array alip bunu modifiye edicek bi fonksiyon yaz
ornegin alttaki ornek icin

int[] fonksiyon()

yerine

void fonksiyon(int [])

yap, sonra cagirirken arrayi initialize edip cagirirsin.


Hatan su, readArray fonksiyonunda kullandigin sc global olarak define edilmemis oldugundan, define etmeden bi variable kullaniyosun orda, cunku sc denen seyi baska bi fonksiyonda define edip initialize ettin, local bi variable kisaca.

Yapman gereken, ya yeni bi field eklemek Scanner icin, ya da Scanner'i readArray'de declare etmek, ki ikincisi mantiklisi.
Scanner sc = new Scanner (System.in);
satirini main'den silip readArray'in basina al


length'i bulamamasinin sebebi de length'in fonksiyon degil field olmasi Java Array objesinde.
a.length diye alicaksin () olmadan.

diger hatalari da kodun uzerine yaziyorum comment olarak

sigisMoNd said:
javada array kullanarak bir diziyi tersten nasil yazabilirim?

asagida denedim ancak hata verdi cmd de. hata olarak scanner icin cannot find symbol yaziyor. bir de a.length() kisimlari icin yine cannot find symbol yaziyor. su scanner i dogru yere koyamadim sanirim. denedim ama cozemedim. a.length() i neden bulamiyor onu da anlamadim.


said:

public class Array1 {

// invert etmiyo bu fonksiyon, inverted sekilde basiyo ekrana, printInverted falan gibi bi isim daha dogru olur
static void invert (int[]a) {

for (int i=a.length()-1; i>=0; i--) {
System.out.println(a[i] + " " );
}

}

static int[] readArray () {
// Scanner sc = new Scanner(System.in) burda olcak
int len = sc.nextInt();
int[]a = new int[len];
for (int i=0; i<len; i++) {
a[i] = sc.nextInt();

//bu yanlis, her eleman icin donguyu tamamlayip
// arrayi doldurup, ondan sonra dondureceksin a yi
return a;
}
// return a burada olacak
}

static void printArray (int[] a) {
for (int i=0; i<a.length(); i++) {
System.out.println(a[i] + " " );
}
}

public static void main (String[]args) {
// bu alttaki scanner satirini kaldir
Scanner sc = new Scanner (System.in);
int[]a = readArray();
printArray(a);
invert(a);
}
}

Mesaj tarihi:
Penthesilea said:
ilk olarak sen sen ol array donduren fonksiyon yazmaktan kacin. onun yerine bi array alip bunu modifiye edicek bi fonksiyon yaz
ornegin alttaki ornek icin

int[] fonksiyon()

yerine

void fonksiyon(int [])

yap, sonra cagirirken arrayi initialize edip cagirirsin.



burada modifiye etmek icin invert i yazdim. o da zaten void invert (int []) tam anlayamadim burada demek istedigini.

edit: simdi commentleri okiyim. yeni gordum editledigini
Mesaj tarihi:
aciklamayi baya kotu yapmisim sc icin, saatin de sabah 7 olmasi ve hala yatmamis olmam etkisiyle :)

Bir braket { } icinde bisey declare edersen Object x; seklinde, bu declaration sadece o braketler icinde gecerli olur, local bi variable'dir.

O yuzden sen gidip main'de declare ettigin bir variable'i baska fonksiyonda kullanamazsin. Ya o fonksiyonda kullanmadan once yaratacaksin, ya da bu variable global bi variable olacak, fonksiyonlarin disinda declare edeceksin yani. senin sorununu yukarida soyledigim olay basitce cozuyo ama.
Mesaj tarihi:
En son olarak println() yerine print() yapmazsan istedigin gibi basmicak ekrana, onun yerine soyle yap diyip yatiyorum :)

static void printArray (int[] a) {
for (int i=0; i<a.length; i++) {
System.out.print(a[i] + " " );
}
System.out.println();
}
Mesaj tarihi:
en son su hale getirdim ama hala hata aliyorum length konusunda
said:

import java.util.*;

public class Array1 {

static void invert (int[] a) {
int i = 0;
int j = a.length - 1;
while (i < j) {
int h = a[i];
a[i] = a[j];
a[j] = h;
i++;
j--;
}
}

static int[] readArray () {
Scanner sc = new Scanner (System.in);
int len = sc.nextInt();
int[]a = new int[len];
for (int i=0; i<len; i++) {
a[i] = sc.nextInt();

}
return a;
}

static void printArray (int[] a) {
for (int i=0; i<a.length; i++) { //hata burada
System.out.println(a[i] + " " );
}
}

public static void main (String[]args) {

int[]a = readArray();
printArray(a);
invert(a);
}
}



pardon yaticakmisin :) iyi uykular o zaman

edit 324234: calisan hali
Mesaj tarihi:
hah invert simdi invert olmus iste :)

abi a.length() leri a.length yaparsak sorunun cozulecek yukarda da dedigim gibi, Java'da length bi fonksiyon degil, bi field. () lari kaldi yani length'in sonundan

calismasi lazim ondan sonra hata gormuyorum ben, println leri de bi ust posttaki gibi duzeltirsen programi calistirdiktan sonra of yanlis basmisim diye duzeltmene gerek kalmicak :)
Mesaj tarihi:
abi calisti ama yanlis calisti ya saka gibi.

9
1 2 3 4 5 6 7 8 9

yine
1 2 3 4 5 6 7 8 9
verdi :'(

invertte sorun sanki bakiyim bir

printArray() komutu vermeye unutmusum invertten sonra :D
Mesaj tarihi:
Abi, invert bu sefer sadece array'i modifiye ediyo, modifiye ettikten sonra altina print cagirman lazim, basmiyosun su anda sen invert ettigin arrayi
invert fonksiyonunda hata yok

onemli degil bu arada ne demek
Mesaj tarihi:
Pratik bilgiler: Konsola array yazdırmak için Arrays API'si:

System.out.println(Arrays.toString(a));


Ayrıca index'ler üzerinde çalışmıyorsanız Java 1.5'de eklenen foreach döngüsünü kullanmanızı şiddetle tavsiye ederim. Hem yazması kolay, hem okuması. Hata şansınız da daha az.

for (int i = 0; i < a.length; i++) {
syso(a[i]);
}

yerine

for (int n : a) {
syso(n);
}

Okunuşu: a içindeki (int tipindeki) her n için { ... }
a array'inin en başından başlayıp sırayla tüm elemanlar için dönüyor yani. Ayrıca sadece array için değil, bütün Iterable'lar için kullanılabiliyor.

Dipnot: i değişkeni index anlamında kullanıldığı için foreach kullanırken i kullanmaktan kaçının. Çünkü burda i index değil, integer. En ideali anlaşılabilir tam bir kelime kullanmak. Ama tabi yerine göre n, m gibi değişken isimleri de yeterli olabilir. Metod kısaysa özellikle.
Mesaj tarihi:
@Mirage: baya pratik gozukuyor gercekten

benim baska bir sorum olucak. simdi amac verilen quadrat matrixte ana diagonalde (almancada hauptdiagonal diye geciyor ondan oyle dedim) spiegelung(yansima denilebilir sanirim) yapilacak. simdi ornek vericem o zaman anlarsiniz:

mesela


2 0 0 0 2 7 6 3
7 8 0 0 --- 0 8 5 1
6 5 6 0 ---/ 0 0 6 7
3 1 7 5 0 0 0 5

said:

import java.util.*;

public class Array3 {

static int[][] readArrayMatrix () {
Scanner sc = new Scanner (System.in);
int len = sc.nextInt();
int[][]a = new int[len][len];
for (int i=0; i<len; i++) {
for (int j=0; j<len; j++) {
a[i][j] = sc.nextInt();
}
}
return a;
}

static void printMatrix (int[][]a) {
for (int i=0; i<a.length; i++) {
for (int j=0; j<a.length; j++) {
System.out.print(a[i][j] + " " );
}
} System.out.println();

}

static void transpose (int[][]a) {
for (int i=0; i<a.length; i++) {
for (int j=0; j<a.length; j++) {
int h = a[i][j];
a[i][j] = a[j][i];
a[j][i] = h;

} System.out.println();
}
}

public static void main (String[]args) {
int[][]a = readArrayMatrix();
//printMatrix(a);
transpose(a);
printMatrix(a);
}
}



benimkinde ayni kaliyor nedense. yazdigim transpose metodu mantikli gelmisti.
Mesaj tarihi:
O senin transpose kodu 2 defa transpose eder.

yani once [0, 2] yi [2, 0] la swapliyosun, sonra i=2 j =0 olunca [2, 0] i [0,2] ile swapliyosun, ortaya ayni sey cikio :)

transpose'un for loopunda j yi i+1'den baslat.
Mesaj tarihi:
Bu arada sey, printmatrix'inde endline'i koydugun yer yanlis zaten calistirirsan farketmissindir, bi de transpose komutunda gereksiz bi endline basiyosun.

Bu arada Mum'un dedigi gibi arrays.tostring'i kullanman baya kolaylastirir isini. matrixlerde falan da kullanabilirsin.

ikinci dedigi islemi yapman icin ama, arrayinde bi obje tasiyor olman gerekli. int yerine Integer tasiman lazim yani. Gerci otomatik cast ediyor olmasi lazim int'i Integer'a, ama gerek yok boyle bi ornekte.
bu olmaz yani,

for (int n : a) {
syso(n);
}

boyle yapman lazim

for(Integer n : a) {
System.....(a);
}



arrays to string'i matrixlerde boyle kullanabilirsin

for(int i=0; i<a.length; i++) {
System.out.println(Arrays.toString(a[i]);
}


a[i][j] ye mesela elementlerimiz, a[i] burada bir rowu temsil ediyor yani, e matrix de her rowu bir array olan bi dalga sonucta.
Mesaj tarihi:
For each döngüsü Java'ya 1.5 ile eklendi. Eklendiğinde primitif array'ler için de çalışıyordu.

said:
The for-each construct is also applicable to arrays, where it hides the index variable rather than the iterator. The following method returns the sum of the values in an int array: ...


1.5 for each
Mesaj tarihi:
Abi ben bunu kullanamadigimi adim gibi hatirliyorum ya

Derken tamam neden oyle bisey dusundugumu hatirladim. Kodlarimda arrayden ziyade Map, Set falan kullandigimdan, ve bunlar primitif type tasimadigindan kullanamiyordum, taslar yerine oturdu :) for each'in sucu yokmus ehue.

6 yazmisim evet 5 olacak, 6 zaten hala guncel surum di mi? Ben ilk 2007 yazinda ogrenip asik olmustum :)
Mesaj tarihi:
Evet 6 hala güncel sürüm.

Bu arada Set ile çalışıyor. Iterable interface'ine sahip her tip için çalışıyor işte.

Map ile de doğrudan çalışmıyor ama Map.entrySet metoduyla key/value ikililerinden oluşan bir set alıp o set üzerinden for each döngüsü kullanabilirsin.
Mesaj tarihi:
Hayir onu kastetmedim, surekli Set ve Map ile kullandigim icin for each'i, ve onlar da primitive type degil sadece Object tasidiklari icin, aklimda foreach'te de olmuyor diye kalmis.

ne yaptin sen de allaskina onu mu bilmicem :)
Mesaj tarihi:
tekrar selam!

2 sorum var. 1.si asagida yazdigim kodla ilgili.

input: mesela


5 //n-n matrix icin n degeri

23 4 54 7 8 9 5 4 1 //bunlar da bu matrixe yerlestirilecek
//sayilar. satir satir yerlestirilecek
//ama sutun halinde yazilmis halinde
//ekrana verilecek. bos olan hucreler de 0
//ile doldurulacak

23 9 0 0 0
4 5 0 0 0
54 4 0 0 0 ===> boyle yani
7 1 0 0 0
8 0 0 0 0



benim yazdigim programda ilk ve son sayilar matrixe eklenmiyor nedense. cozemedim.

2. sorum da for-each ile ilgili. asagidakinde mesela

for (int j=0; j<n; j++) {
for (int i=0; i<n; i++) {
System.out.print(a[i][j] + " " );
}


su kisimdaki kullanimi mumkun mudur? 2 boyutlu oldugu icin burada cozemedim o olayi. mumkunse nasil yapilir?

said:

import java.util.*;

class Array5 {
public static void main (String[]args) {
Scanner sc = new Scanner (System.in);
int n= sc.nextInt();
byte[][] a = new byte[n][n];
byte val = (byte)sc.nextInt();
while (sc.hasNextInt()) {
// fill the matrix row by row
val = (byte)sc.nextInt();
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (sc.hasNextInt()) {
a[i][j] = val;
val = (byte)sc.nextInt();
} else { a[i][j] = 0; }
}
}
// write the matrix column by column
for (int j=0; j<n; j++) {
for (int i=0; i<n; i++) {
System.out.print(a[i][j] + " " );
}
}
}
}
}

Mesaj tarihi:
For-each sadece okuma amaçlı kullanılıyor. Index kullanarak array'e atama yaptığın için uymuyor bu duruma.

val değişkenini kaldırırsan düzelir sorun sanırım. İlk başta val değişkenine atama yaparken fazladan nextInt kullandığın için ilk input boşa gidiyor. Dolayısıyla da son elemana geldiğin zaman başlangıçta boş yere okuduğun int yüzünden okunacak int kalmamış oluyor.

said:

import java.util.*;

class Array5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
byte[][] a = new byte[n][n];
while (sc.hasNextInt()) {
// fill the matrix row by row
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (sc.hasNextInt()) {
a[i][j] = (byte) sc.nextInt();
} else {
a[i][j] = 0;
}
}
}
// write the matrix column by column
for (int j = 0; j < n; j++) {
for (int i = 0; i < n; i++) {
System.out.print(a[i][j] + " ");
}
}
}
}
}


Edit: Matrixteki sütunları yatay olarak yazdırcak olsan for-each kullanabilirdin. Matrix'i transpoze etmiş gibi yazdırır ama:

said:

for (byte[] column : a) {
System.out.println(Arrays.toString(column));
}
×
×
  • Yeni Oluştur...