| String как Array |
|
|
Sunday, 12 March 2006 | Д-р Евгений Канель, Зэев Фрайман для раздела Ученье – свет При обучении основам программирования используется огромное количество задач и упражнений с использованием литерных переменных; этот тип в языке PASCAL определяется как string и легко доступен для множества разнообразных операций. При переходе к Java сходу обнаруживается, что, по большому счету, практически все эти упражнения придется переделывать в смысле формулировки задания как минимум – в Java литерный тип оказывается «закрытым» на изменения введенного литерного значения.В результате и перед учителями, и перед авторами задачников, и перед министерством образования возникает очень непростая задача: переформулировать фактически целый класс задач так, чтобы все-таки можно было использовать заложенные в них полезные и в дидактическом, и в сугубо программистском смысле возможности.
Сегодня мы хотим представить вам такую задачу. Вот как она формулировалась в государственном экзамене (письменном) на аттестат зрелости по предмету «Основы компьютерных наук».
А вот решение, сделанное на Java; естественно, что, выполняя «в целом и общем» требования задачи, работает она несколько иначе – и, главное, в качестве задания для ученика требует иной формулировки.
А каково ваше мнение на этот счет?
/**
* @author (Kanel & Fraiman)
*/
import java.util.*;
public class myArray_2
{
public String charToEnd(String s,int m){
if((m>0)&&(m return s.substring(0,m)+s.substring(m+1)+s.charAt(m);
else {IO.writeln("Error!");return s;}
}
public void arrayPrintMissed(boolean[] arrCurr, char first){
for(int i=0;i
if(!arrCurr[i])IO.write((char)(i+first)+" ");
}
IO.writeln();
}
public void inputStrings(char first, char last){
int m; char firstChar;String newS;
boolean[] arrTest= new boolean[last-first+1];
boolean[] arrCurr= new boolean[last-first+1];
Arrays.fill(arrTest,true);
Arrays.fill(arrCurr,false);
String s=IO.readString(" Enter the first string");
while(!s.equals("")){
firstChar=s.charAt(0);
if( (firstChar>=first)&&(firstChar<=last))arrCurr[firstChar-first]=true;// the arrCurr update
m=IO.readInt("Enter the place for char to be moved ");
newS=charToEnd(s,m);
IO.writeln("Before moving: "+s);
IO.writeln("After moving: "+newS);
s=IO.readString(" Enter the next string or empty string to stop");
}
if (Arrays.equals(arrTest,arrCurr))
IO.writeln("Yes,there were strings started at each letter from checking domain");
else {IO.writeln("No, the letters have been missed:");
arrayPrintMissed(arrCurr,first);}
}
public static void main(String[] args){
IO.writeln("Enter the checking domain:('a'..'z') or other");
char first=IO.readChar("Enter the first letter");
char last= IO.readChar("Enter the last letter");
myArray_2 a=new myArray_2();
a.inputStrings(first,last);
}
}
|