Глава 6
Задача 6.2 "Таблица расстояний."
В атласе часто публикуются таблицы рассотояний между важнейшими городами, названия которых служат заголовками столбцов и колонок. В Java мы не можем создать такую таблицу в виде двумерного массива, поскольку ряды и колонки в ней являются строками, а не целыми числами. Решение заключается в применении хеш-таблицы, где ключами являются названия городов, а значениями - числа, которые послужат индексами для двумерной матрицы расстояний между городами (то есть каждому городу будет присвоен номер, а по двум номерам-индексам можно будет обращаться к двумерному массиву). Напишите программу, которая:
-
Эта программа считывает расстояния между городами из файла по имени data.txt, затем работает с этими данными внося изменения в расстояние между городами, результат -
измененную матрицу расстояний выводит в файл data.out. Охватывает 20 городов.
- использует интерфейс класса Display для изменения расстояний между любыми двумя городами. Подобная программа может использоваться на практике.
Недостаток: надо в конце работы программы удалять файл data.txt и переименовать выходной файл data.out в data.txt, тогда программу можно использовать при новом запуске с новыми данными.
Решение 4
Код программы:
import java.io.*;
import javagently.*;
import java.util.*;
class SityTable {
Display display = new Display ("Currency Converter");
int indexTable[][]=new int[20][20];
Hashtable table = new Hashtable();
String sity[] = {
"Sidney","London","Paris","Chikago","Roma","Bucharest","Moscou","Kiev","Helsinky","Bagdad",
"Khabarovsk","Omsk","Tomsk","Krasnoyarsk","Novosibirsk","Ekaterinburg","StPetersburg","Sochi",
"Volgograd","Saratov"};
String r[] = {"0","1","2","3","4","5","6","7","8","9",
"10","11","12","13","14","15","16","17","18","19"};
SityTable () throws IOException {
Stream fout= new Stream ("data.out",Stream.WRITE);
Stream fin = new Stream(System.in);
try {
fin = Filer.open("data.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
putSityHashTab();
putIndexTab(fin);
showIndexTab();
echo();
transactions();
showIndexTab();
showIndexTab1(fout);
fin.close();
fout.close();
}
void putSityHashTab(){
for(int i=0; i < sity.length;i++){
table.put(sity[i],r[i]);
}
}
void putIndexTab(Stream fin) throws IOException {
for(int i=0;i < sity.length;i++){
for (int j =0;j < sity.length;j++){
indexTable[i][j]= fin.readInt();
}
}
}
void showIndexTab(){
System.out.println("\n");
System.out.print("\t\t\t\t\t");
for(int i=0;i < r.length;i++)
System.out.print(r[i]+ "\t" );
System.out.println("\n");
for(int i=0;i < sity.length;i++){
String s = sity[i];
if(s.length() > 11){
System.out.print(sity[i]+ "\t" );}
else{
if(s.length() > 7)
System.out.print(sity[i]+ "\t\t" );
else
System.out.print(sity[i]+ "\t\t\t" );
}
System.out.print(r[i]+ "\t" );
// System.out.print(table.get(sity[i]+ " " ));
for (int j =0;j
System.out.print(indexTable[i][j] + "\t");
}
System.out.println();
}
}
void showIndexTab1(Stream fout){
for(int i=0;i < sity.length;i++){
for (int j =0;j < sity.length;j++){
fout.print(indexTable[i][j] + " ");
}
fout.println("");
}
}
void echo() {
display.println("In the table");
int i = 1;
for (Enumeration e = table.keys(); e.hasMoreElements(); i++) {
String sityZ = (String)e.nextElement();
display.println(sityZ);
}
}
void transactions () {
display.prompt("Sity1", "London");
display.prompt("Sity2", "Paris");
display.prompt("Distance", 100);
display.prompt("Finished?", "No");
String sity1;
String sity2;
int dist = 0;
boolean done = false;
String status;
while (!done) {
display.println("Input the sityName");
display.ready("Enter sity1 and sity2 and press ready");
sity1 = display.getString("Sity1");
sity2 = display.getString("Sity2");
dist = display.getInt("Distance");
status = display.getString("Finished?");
if (table.containsKey(sity1)& table.containsKey(sity2) ) {
String k =(String) table.get(sity1);
int k1 =(int) Double.valueOf(k).doubleValue();
String m =(String) table.get(sity2);
int m1 =(int) Double.valueOf(m).doubleValue();
indexTable[k1][m1] = dist;
indexTable[m1][k1] = dist;
display.println("Distance between "+sity1+ " end "+sity2+ " is "+indexTable[k1][m1]+" km" );
m1 = 0; k1 = 0;
}
else {
display.println("Sorry, sity "+sity1+ " or sity " +sity2 +" not in table\n");
}
//status = display.getString("Finished?");
done = status.equals("Yes");
} // while
} // transactions
public static void main(String[] args) throws IOException {
new SityTable ();
}
} // class Converter
Результат :
Назад |
Начало урока |
Вверх |
Вперед
Содержание