Section 12 Programming Exercises

Bölüm 12 Sorular

*12.1 (NumberFormatException) Listing 7.9, Calculator.java, is a simple commandline calculator. Note that the program terminates if any operand is nonnumeric.

(NumberFormatException) Madde 7.9 Calculator.java,  komut satırından çalışan basit bir hesap makinesi uygulamasıdır. Bu uygulamada sayısal olmayan bir operand girildiğinde programın çalışması sonlanıyordu.

Write a program with an exception handler that deals with nonnumeric operands; then write another program without using an exception handler to achieve the same objective. Your program should display a message that informs the user of the wrong operand type before exiting (see Figure 12.12).

Sayısal olmayan operandları  ele alan bir hata yakalama (exception handler)  mekanizmas olan bir program yazınız,  sonra exception handler kullanmadan aynı işi yapan başka bir program yazınız. Programınız, sonlanmadan önce kullanıcıya yanlış operand türünü bir mesaj ile göstermelidir (bkz. Şekil 12.12).

FIGURE 12.12 The program performs arithmetic operations and detects input errors.

FIGURE 12.12 Aritmetik işlemleri gerçekleştiren  ve giriş hatalarını tespit eden program.

*12.2 (InputMismatchException) Write a program that prompts the user to read two integers and displays their sum. Your program should prompt the user to read the number again if the input is incorrect.

(InputMismatchException) Kullanıcının girdiği iki tam sayıyı okuyan ve toplamını gösteren bir program yazınız. Programınız, eğer girdi doğru değilse kullanıcıdan tekrar bir sayı girmesini  istesin.

*12.3 (ArrayIndexOutOfBoundsException) Write a program that meets the following requirements:

(ArrayIndexOutOfBoundsException) Aşağıdaki gereklilikleri karşılayan bir program yazınız:

Creates an array with 100 randomly chosen integers.

Prompts the user to enter the index of the array, then displays the corresponding element value. If the specified index is out of bounds, display the message Out of Bounds.

Rastgele seçilmiş 100 tam sayıdan oluşan bir dizi yaratır.

Kullanıcıdan bir dizi indeksi girmesini ister ve bu indekse karşılık gelen  elemanın değerini gösterir. Eğer girilen indeks dizinin sınırları dışındaysa,  “Girilen indeks sınırın dışında” mesajını gösterir.

*12.4 (IllegalArgumentException) Modify the Loan class in Listing 10.2 to throw IllegalArgumentException if the loan amount, interest rate, or number of years is less than or equal to zero.

(IllegalArgumentException) Madde 10.2’de bulunan  Loan sınıfını, eğer kredi miktarı, faiz oranı ya da yıl sıfırdan küçük ya da eşitse  IllegalArgumentException hatası fırlatacak şekilde yeniden düzenleyin.

*12.5 (IllegalTriangleException) Programming Exercise 11.1 defined the Triangle class with three sides. In a triangle, the sum of any two sides is greater than the other side. The Triangle class must adhere to this rule.

 (IllegalTriangleException) Programlama Soruları  11.1’de Triangle sınıfı üç kenarı kullanılarak tanımlanmıştı. Üçgenlerde iki kenarın uzunlukları toplamı, diğer kenarın uzunluğundan büyüktür. Triangle sınıfı bu kurala bağlı olmalıdır.

Create the IllegalTriangleException class, and modify the constructor of the Triangle class to throw an IllegalTriangleException object if a triangle is created with sides that violate the rule, as follows:

Bir IllegalTriangleException sınıfı yaratın ve Triangle sınıfının constructor’ını  girilen kenar uzunlukları bu kurala  uymuyorsa IllegalTriangleException  nesnesi fırlatacak şekilde yeniden düzenleyin.

/** Construct a triangle with the specified sides */

/** Belirtilen kenar uzunlukları ile bir üçgen nesnesi yaratın */

public Triangle(double side1, double side2, double side3)

throws IllegalTriangleException {

// Implement it

// Kodu buraya yaz

}

*12.6 (NumberFormatException) Listing 6.8 implements the hex2Dec(String hexString) method, which converts a hex string into a decimal number.

(NumberFormatException) Madde 6.8’de onaltılık sistemde yazılmış bir string’i ondalık sayıya dönüştüren  hex2Dec(String hexString) metodu yazılmıştı.

Implement the hex2Dec method to throw a NumberFormatException if the string is not a hex string.

hex2Dec metodunu  eğer parametresinde gelen string onaltılık sayı değilse NumberFormatException  fırlatacak şekilde yazınız.

*12.7 (NumberFormatException) Write the bin2Dec(String binaryString) method to convert a binary string into a decimal number.

(NumberFormatException) İkilik sayı sistemindeki bir string’i ondalık sayıya dönüştüren   bin2Dec(String binaryString)  metodunu yazınız.

Implement the bin2Dec method to throw a NumberFormatException if the string is not a binary string.

bin2Dec metodunu eğer parametresinde gelen string ikilik sayı değilse NumberFormatException  fırlatacak şekilde yazınız.

*12.8 (HexFormatException) Exercise 12.6 implements the hex2Dec method to throw a NumberFormatException if the string is not a hex string. Define a custom exception called HexFormatException. Implement the hex2Dec method to throw a HexFormatException if the string is not a hex string.

(HexFormatException) Sorular 12.6’da hex2Dec metodu gelen string onaltılık değilse NumberFormatException fırlatıyordu. HexFormatException isminde özelleştirilmiş bir exception tanımlayınız. hex2Dec metodunu  eğer parametresinde gelen string hex değilse HexFormatException  fırlatacak şekilde yazınız.

*12.9 (BinaryFormatException) Exercise 12.7 implements the bin2Dec method to throw a BinaryFormatException if the string is not a binary string.

(BinaryFormatException) Sorular 12.7’de bin2Dec metodu gelen string ikilik değilse BinaryFormatException fırlatıyordu.

Define a custom exception called BinaryFormatException. Implement the bin2Dec method to throw a BinaryFormatException if the string is not a binary string.

BinaryFormatException isminde özelleştirilmiş bir exception tanımlayınız. bin2Dec metodunu eğer parametresinde gelen string ikilik sayı değilse BinaryFormatException   fırlatacak şekilde yazınız.

*12.10 (OutOfMemoryError) Write a program that causes the JVM to throw an OutOfMemoryError and catches and handles this error.

(OutOfMemoryError) JVM’nin OutOfMemoryError fırlatmasına neden olacak bir program yazınız ve programınızda bu hatayı yakalayıp, işleyiniz.

**12.11 (Remove text) Write a program that removes all the occurrences of a specified string from a text file. For example, invoking java Exercise12_11 John filename removes the string John from the specified file. Your program should get the arguments from the command line.

(Metni sil) Bir metin dosyası içerisinde, belirtilen string’in tüm tekrarlarını silen bir program yazınız. Örneğin,  java Exercise12_11 Ahmet dosyaadi çalıştırıldığında, belirtilen dosyada bulunan tüm Ahmet string’lerini dosyadan kaldırır. Programınız argümanları, komut satırından alacak şekilde yazılmalıdır.

**12.12 (Reformat Java source code) Write a program that converts the Java source code from the next-line brace style to the end-of-line brace style. For example, the following Java source in (a) uses the next-line brace style. Your program converts it to the end-of-line brace style in (b).

 (Java kaynak kodu yeniden biçimlendirme) Java kaynak kodunu küme parantezi yeni satırda ( next-line brace) biçiminden küme parantezi satır sonunda (end-of-line brace) biçimine dönüştüren bir program yazınız. Örneğin, (a)’da gösterilen Java kaynak kodu küme parantezi yeni satırda biçimini kullanmaktadır.  Programınız bunu  (b)’de gösterilen küme parantezi satır sonunda biçimine dönüştürmelidir.

(a)Küme parantezi yeni satırda biçimi                (a)Küme parantezi satır sonunda biçimi

Your program can be invoked from the command line with the Java sourcecode file as the argument. It converts the Java source code to a new format. For example, the following command converts the Java source-code file Test.java to the end-of-line brace style.

Program komut satırından Java kaynakdosyaadı argümanı ile çağrılabilir. Bu java kaynak kodunu yeni biçime dönüştürecektir. Örneğin aşağıdaki komut, verilen java kaynak kodunu küme parantezi satır sonunda biçimine dönüştürecektir.

java Exercise12_12 Test.java

*12.13 (Count characters, words, and lines in a file) Write a program that will count the number of characters, words, and lines in a file. Words are separated by whitespace characters. The file name should be passed as a command-line argument, as shown in Figure 12.13.

(Bir dosyadaki karakter, kelime ve satır sayısı) Bir dosyadaki karakter, kelime ve satır sayısını hesaplayan bir program yazınız. Kelimeler boşluk karakteri ile ayrılırlar. Şekil 12.13’de gösterildiği gibi dosya adı programa komut satırı argümanı olarak geçilmeli.

FIGURE 12.13 The program displays the number of characters, words, and lines in the given file.

ŞEKIL 12.13 Belirtilen dosyadaki karakter, kelime ve satır sayısını gösteren program.

*12.14 (Process scores in a text file) Suppose that a text file contains an unspecified number of scores separated by blanks. Write a program that prompts the user to enter the file, reads the scores from the file, and displays their total and average.

(Metin dosyasındaki notları işleme) Bir metin dosyasının aralarında belirsiz sayıda boşluk bulunan not değerlerini içerdiğini varsayalım. Kullanıcıdan bu dosyanın adını alan, dosya içerisindeki notları okuyup bunların toplamını ve ortalamasını gösteren bir program yazınız.

*12.15 (Write/read data) Write a program to create a file named Exercise12_15.txt if it does not exist. Write 100 integers created randomly into the file using text I/O. Integers are separated by spaces in the file. Read the data back from the file and display the data in increasing order.

(Veri okuma/yazma) Eğer daha önce yoksa Exercise12_15.txt adında bir dosya yaratan bir program yazınız. I/O kullanarak rastgele üretilmiş 100 tam sayı değerini bu dosyaya yazınız. Dosyada bulunan tam sayılar birbirinden boşluk karakteri ile ayrılmalı. Dosyadan veri okuyarak bu verileri artan sırada gösteriniz.

**12.16 (Replace text) Listing 12.16, ReplaceText.java, gives a program that replaces text in a source file and saves the change into a new file. Revise the program to save the change into the original file. For example, invoking java Exercise12_16 file oldString newString replaces oldString in the source file with newString.

(Metni değiştir) Madde 12.16 ReplaceText.java’da, kaynak dosyadaki metni yer değiştiren ve değiştirilmiş dosyayı yeni bir dosya olarak kaydeden bir program bulunmaktadır. Değişiklikleri orijinal dosyaya kaydedecek şekilde programı düzenleyiniz. Örneğin;  java Exercise12_16 dosya eskiString yeniString çalıştırdığımızda kaynak dosyadaki eskiString’leri yeniString ile değiştirir.

***12.17 (Game: hangman) Rewrite Programming Exercise 7.35. The program reads the words stored in a text file named hangman.txt. Words are delimited by spaces.

(Oyun: adam asmaca) Programlama Soruları 7.35’i yeniden yazınız. Program, adamasmaca.txt dosyasındaki kelimeleri  okuyup saklayacak. Kelimeler boşluk ile ayrılır.

**12.18 (Add package statement) Suppose you have Java source files under the directories chapter1, chapter2, . . . , chapter34. Write a program to insert the statement package chapteri; as the first line for each Java source file under the directory chapteri. Suppose chapter1, chapter2, . . . , chapter34 are under the root directory srcRootDirectory. The root directory and chapteri directory may contain other folders and files. Use the following command to run the program:

(package ifadesi ekleme) chapter1, chapter2, . . . , chapter34 dizinlerinde  Java kaynak dosyalarınız olsun.  chapteri dizininde bulunan her Java kaynak dosyasının ilk satırına package chapteri; ifadesini ekleyen bir program yazınız.  chapter1, chapter2, . . . , chapter34 dizinlerinin, kök dizin srcRootDirectory‘nin altında olduğunu varsayalım. Kök dizin ve  chapteri dizinlerinin içerisinde başka dosya ve klasörler bulunabilir. Aşağıdaki komutu kullanarak programınızı çalıştırın.

java Exercise12_18 srcRootDirectory

*12.19 (Count words) Write a program that counts the number of words in President Abraham Lincoln’s Gettysburg address from http://cs.armstrong.edu/liang/data/Lincoln.txt.

(Kelimeleri say) http://cs.armstrong.edu/liang/data/Lincoln.txt bağlantısında Başkan Abraham Lincoln’ün Gettysburg adresindeki kelimeleri sayan bir program yazınız.

**12.20 (Remove package statement) Suppose you have Java source files under the directories chapter1, chapter2, . . . , chapter34. Write a program to remove the statement package chapteri; in the first line for each Java source file under the directory chapteri. Suppose chapter1, chapter2, . . . , chapter34 are under the root directory srcRootDirectory. The root directory and chapteri directory may contain other folders and files. Use the following command to run the program:

(package ifadelerini kaldırın) chapter1, chapter2, . . . , chapter34 dizinlerinde  Java kaynak dosyalarınız olsun.  chapteri dizininde bulunan her Java kaynak dosyasının ilk satırı olan package chapteri; ifadesini kaldıran bir program yazınız.  chapter1, chapter2, . . . , chapter34 dizinlerinin, kök dizin srcRootDirectory‘nin altında olduğunu varsayalım. Kök dizin ve  chapteri dizinlerinin içerisinde başka dosya ve klasörler bulunabilir. Aşağıdaki komutu kullanarak programınızı çalıştırın.

java Exercise12_20 srcRootDirectory

*12.21 (Data sorted?) Write a program that reads the strings from file SortedStrings. txt and reports whether the strings in the files are stored in increasing order. If the strings are not sorted in the file, displays the first two strings that are out of the order.

(Veri sıralı mı?) SortedStrings.txt dosyasından bulunan string’leri okuyan ve bu dosydaki string’lerin artan sıralı olup olmadığını kontrol eden bir program yazınız. Eğer dosyada bulunan stringler sıralı değilse, sıra dışında olan ilk iki string’i gösteriniz.

**12.22 (Replace text) Revise Programming Exercise 12.16 to replace a string in a file with a new string for all files in the specified directory using the command:

(Metni yer değiştirme) Programlama Soruları 12.16’yı, aşağıdaki komutu kullanarak belirtilen dizinde bulunan tüm dosyalardaki eski string’i yenisi ile değiştirecek şekilde yeniden düzenleyiniz..

java Exercise12_22 dir oldString newString

**12.23 (Process scores in a text file on the Web) Suppose that the text file on the Web http://cs.armstrong.edu/liang/data/Scores.txt contains an unspecified number of scores. Write a program that reads the scores from the file and displays their total and average. Scores are separated by blanks.

(Web üzerindeki bir metin dosyasında bulunan notları işleme) http://cs.armstrong.edu/liang/data/Scores.txt  bağlantısında bulunan bir metin dosyası belirsiz sayıda not verisini içeriyor olsun. Dosya içerisindeki notları okuyup bunların toplamını ve ortalamasını gösteren bir program yazınız. Not verileri boşluklarla ayrıulmıştır.

*12.24 (Create large dataset) Create a data file with 1,000 lines. Each line in the file consists of a faculty member’s first name, last name, rank, and salary. The faculty member’s first name and last name for the ith line are FirstNamei and LastNamei. The rank is randomly generated as assistant, associate, and full.

The salary is randomly generated as a number with two digits after the decimal point. The salary for an assistant professor should be in the range from 50,000 to 80,000, for associate professor from 60,000 to 110,000, and for full professor from 75,000 to 130,000. Save the file in Salary.txt. Here are some sample data:

(Büyük veri seti) 1 000 satırdan oluşan bir veri dosyası yaratınız. Dosyanın her bir satırı fakülte üyesinin adı, soyadı,  derecesi ve maaşından oluşur. Her bir i’inci satır için fakülte üyesinin adı ve soyadı, adıi ve soyadıi biçimde olacak. Fakülte üyesinin derecesi,  yardımcı doçent, doçent ve profesör olacak şekilde rastgele üretilecek.

Maaş, virgülden sonra iki basamak olacak şekilde rastgele üretilecek. Yardımcı doçent maaşı 50000 ile 80000, doçent maaşı 60000 ile 110000, profesör maaşı 75000 ile 130000 aralığında olmalıdır. Dosyayı Salary.txt olarak kaydedin. Aşağıda örnek veriyi görebilirsiniz:

FirstName1 LastName1 assistant 60055.95

FirstName2 LastName2 associate 81112.45

. . .

FirstName1000 LastName1000 full 92255.21

Adı1 Soyadı1  yardımcıdoçent 60055.95

Adı2 Soyadı2  doçent 81112.45

. . .

Adı1000 Soyadı1000  profesör 92255.21

*12.25 (Process large dataset) A university posts its employees’ salaries at http://cs.armstrong.edu/liang/data/Salary.txt. Each line in the file consists of a faculty member’s first name, last name, rank, and salary (see Programming Exercise 12.24). Write a program to display the total salary for assistant professors, associate professors, full professors, and all faculty, respectively, and display the average salary for assistant professors, associate professors, full professors, and all faculty, respectively.

(Büyük veri setinin işlenmesi) Üniversite çalışanlarının maaşlarıhttp://cs.armstrong.edu/liang/data/Salary.txt dosyasında bulabilirsiniz. Dosyanın her bir satırı fakülte üyesinin adı, soyadı,  derecesi ve maaşından oluşur. (Bakınız, Programlama Soruları 12.24) Yardımcı doçentlere, doçentlere, profesörlere ve bütün fakülteye, her biri için ödenen maaş toplamını ve ortalamasını gösteren bir program yazınız.

**12.26 (Create a directory) Write a program that prompts the user to enter a directory name and creates a directory using the File’s mkdirs method. The program displays the message “Directory created successfully” if a directory is created or “Directory already exists” if the directory already exists.

(Dizin yaratma) Kullanıcıdan bir dizin adı alan ve   File’ın mkdirs metodunu kullanarak verilen dizini oluşturan bir program yazınız. Program, eğer dizin oluşturulsa “Dizin başarılı şekilde oluşturuldu”,  girilen isimde bir dizin varsa “Bu dizin zaten mevcut” mesajını gösterecek.

**12.27 (Replace words) Suppose you have a lot of files in a directory that contain words Exercisei_j, where i and j are digits. Write a program that pads a 0 before i if i is a single digit and 0 before j if j is a single digit. For example, the word Exercise2_1 in a file will be replaced by Exercise02_01. In Java,

when you pass the symbol * from the command line, it refers to all files in the directory (see Supplement III.V). Use the following command to run your program.

(Kelimeleri değiştir) Bir dizinde, i ve j sayı olmak üzere Exercisei_j şeklinde kelimeler içeren pek çok dosya olsun. Eğer, i ya da j tek basamaklı sayı ise, i ya da j’nin önüne 0 ekleyen bir program yazınız. Örneğin, bir dosyanın içinde bulunan  Exercise2_1  kelimesi ,  Exercise02_01 şeklinde değiştirilmiş olacaktır. Java’da

komut satırından * sembolü girilirse, bu bir dizinde bulunan tüm dosyalar anlamına gelir.  (Bkz. Ekler III.V). Aşağıdaki komutu kullanarak programınızı çalıştırın.

java Exercise12_27 *

**12.28 (Rename files) Suppose you have a lot of files in a directory named Exercisei_j, where i and j are digits. Write a program that pads a 0 before i if i is a single digit. For example, a file named Exercise2_1 in a directory will be renamed to Exercise02_1.In Java, when you pass the symbol * from the command line, it refers to all files in the directory (see Supplement III.V). Use the following command to run your program.

(Dosyaları yeniden adlandırma) Bir dizinde, i ve j sayı olmak üzere Exercisei_j şeklinde isimlendirilmiş pek çok dosya olsun. Eğer, i tek basamaklı sayı ise, i’nin önüne 0 ekleyen bir program yazınız. Örneğin, Exercise2_1 dosya ismi,  Exercise02_1 şeklinde yeniden isimlendirilmiş olacaktır.Java’da komut satırından * sembolü girilirse, bu bir dizinde bulunan tüm dosyalar anlamına gelir.  (Bkz. Ekler III.V). Aşağıdaki komutu kullanarak programınızı çalıştırın.

java Exercise12_28 *

**12.29 (Rename files) Suppose you have a lot of files in a directory named Exercisei_j, where i and j are digits. Write a program that pads a 0 before j if j is a single digit. For example, a file named Exercise2_1 in a directory will be renamed to Exercise2_01. In Java, when you pass the symbol * from the command line, it refers to all files in the directory (see Supplement III.V). Use the following

command to run your program.

(Dosyaları yeniden adlandırma) Bir dizinde, i ve j sayı olmak üzere Exercisei_j şeklinde isimlendirilmiş pek çok dosya olsun. Eğer, j tek basamaklı sayı ise, j’nin önüne 0 ekleyen bir program yazınız. Örneğin, Exercise2_1 dosya ismi,  Exercise2_01 şeklinde yeniden isimlendirilmiş olacaktır. Java’da komut satırından * sembolü girilirse, bu bir dizinde bulunan tüm dosyalar anlamına gelir.  (Bkz. Ekler III.V). Aşağıdaki komutu kullanarak programınızı çalıştırın.

java Exercise12_29 *

**12.30 (Occurrences of each letter) Write a program that prompts the user to enter a file name and displays the occurrences of each letter in the file. Letters are case-insensitive. Here is a sample run:

(Her bir harfin bulunma sayısı) Kullanıcıdan bir dosya adı alan ve bu dosyada bulunan her harfin bulunma sayısını gösteren bir program yazınız. Harflerde büyük-küçük harf duyarlılığı yoktur. Örnek akışı inceleyiniz.

*12.31 (Baby name popularity ranking) The popularity ranking of baby names from years 2001 to 2010 is downloaded from www.ssa.gov/oact/babynames and stored in files named babynameranking2001.txt, babynameranking2002.txt, . . . , babynameranking2010.txt. Each file contains one thousand lines. Each line contains a ranking, a boy’s name, number for the boy’s name, a girl’s name, and number for the girl’s name. For example, the first two lines in the file babynameranking2010.txt are as follows: So, the boy’s name Jacob and girl’s name Isabella are ranked #1 and the boy’s name Ethan and girl’s name Sophia are ranked #2. 21,875 boys are named Jacob and 22,731 girls are named Isabella. Write a program that prompts the user to enter the year, gender, and followed by a name, and displays the ranking of the name for the year. Here is a sample run:

(Popüler bebek isimleri sıralaması) 2001 ile 1020 yılları arasındaki popüler bebek isimleri sıralamasına  www.ssa.gov/oact/babynames bağlantısında bulunan  babynameranking2001.txt, babynameranking2002.txt, . . . , babynameranking2010.txt. dosya isimlerini kullanarak ulaşabilirsiniz. Her bir dosya 1000 satırdan oluşmaktadır. Her bir satır sıralama, erkek ismi, sayısı, kız ismi, sayısı bilgilerini içermektedir. Örneğin,  babynameranking2010.txt dosyasının ilk iki satırı aşağıdaki gibidir. Görüldüğü gibi  1. Sırada, erkek ismi Jacob ve kız ismi Isabella,  2. Sırada erkek ismi Ethan ve kız ism, Sophia bulunmaktadır. 21875 erkek çocuğa Jacob, 22731 kız çocuğa da Isabella  ismi verilmiştir. Kullanıcıdan yıl, cinsiyet, isim bilgisini alıp bunun sırasını gösteren bir program yazınız. Örnek akışı inceleyiniz.

*12.32 (Ranking summary) Write a program that uses the files described in Programming Exercise 12.31 and displays a ranking summary table for the first five girl’s and boy’s names as follows:

(Sıralama özeti) Programlama Alıştırmaları 12.31’de verilen dosyaları kullanarak , aşağıdaki gibi ilk beş erkek ve kız isminin sıralama özeti tablosunu gösteren bir program yazınız.

**12.33 (Search Web) Modify Listing 12.18 WebCrawler.java to search for the word Computer Programming starting from the URL http://cs.armstrong.edu/liang. Your program terminates once the word is found. Display the URL for the page that contains the word.

(Web araması) Madde 12.18 WebCrawler.java’yı,  http://cs.armstrong.edu/liang bağlantısından başlayarak, Computer Programming kelimesini arayacak şekilde düzenleyiniz. Kelime bulunduğunda arama işlemi sonlandırılacak. Kelimeyi içeren sayfanın bağlantısı gösterilecek.