Автор: Louis 28:04:2008, 14:24
Условия задачи:
Ввести n строк с консоли, найти самую короткую и самую длинную строки. Вывести строки и их длину.
Мое решение:
import java.io.*;
public class Nnn {
static int n;
public static void setN(int value){
n=value;
}
public int getN(){
return n;
}
}
public class ArrayCreator {
static String array [] = new String [Nnn.n];
public static void setElement(String value, int i){
array[i]=value;
}
public String getElement(int i){
return array[i];
}
}
CODE
public class Multiplicator {
static int min=ArrayCreator.array[0].length();
static int max=0;
static int nom;
static int nom1;
static void setMax(){
for(int i=0; i<=ArrayCreator.array.length-1; i++){
if(ArrayCreator.array[i].length() >= max){
max = ArrayCreator.array[i].length();
nom=i;
}
}
}
static void setMin(){
for (int i=0; i<=ArrayCreator.array.length-1; i++){
if(ArrayCreator.array[i].length() <= min){
min=ArrayCreator.array[i].length();
nom1=i;
}
}
}
static int getMax(){
return max;
}
static int getNom(){
return nom;
}
static int getMin(){
return min;
}
static int getNom1(){
return nom1;
}
}
CODE
import java.io.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
BufferedReader in = new BufferedReader (new InputStreamReader (System.in));
try{
System.out.println("Vvedite n");
String str = in.readLine();
Integer value = new Integer(str).intValue();
Nnn.setN(value);
}catch (IOException e){System.err.println("error "+e);}
for(int i=0; i<=Nnn.n-1; i++){
BufferedReader in1 = new BufferedReader (new InputStreamReader (System.in));
try{
System.out.println("Vvedite stroky ");
String str = in.readLine();
ArrayCreator.setElement(str,i);
}catch (IOException e){System.err.println("error "+e);}
}
System.out.println("\n");
System.out.println("\n");
for (int i=0; i<=ArrayCreator.array.length-1; i++){
System.out.println(ArrayCreator.array[i]);
}
System.out.println("\n");
Multiplicator.setMax();
Multiplicator.setMin();
System.out.println(Multiplicator.max+" stroka = "+ArrayCreator.array[Multiplicator.nom]);
System.out.println(Multiplicator.min+" stroka = "+ArrayCreator.array[Multiplicator.nom1]);
}
}
все работает задача решается!
Поскольку я только начал изучать Java меня интересуеть мнение более опытных программеров - Что не так.. Что можно было сделать лучше... (Создание классов, методов и пр.)
Очень нужна Ваша оценка.
Автор: Yason 28:04:2008, 17:49
1. Для оформления исходника правильно использовать тег code.
2. Класс Nnn совершенно лишний, это видно даже по тому, что для него нельзя придумать разумного имени.
3. У Вас все поля классов объявлены static, что делает их, по сути, глобальными переменными - это есть плохо, т.к. вся работа ложится на Main.main().
4. Имхо, понятнее было бы примерно вот так:
public static void main(String[] args) {
StringList strings = StringListReader.readStringsFromConsole();
String maxStr = StringList.getLongestString();
String minStr = StringList.getShortestString();
System.out.println(maxStr+" - "+maxStr.length()+" chars");
System.out.println(minStr+" - "+minStr.length()+" chars");
}
где StringList - наследник от java.util.Vector, заточенный для работы со строками, и с парой дополнительных методов, которые возвращают самую длинную и самую короткую строки из списка.
StringListReader - класс со статическим методом readStringsFromConsole(), который (как говорит имя) считывает строки с консоли, и возвращает их в виде StringList.
Достоинство такого подхода, по сравнению с Вашим - возможность повторного использования классов StringListReader и StringList в других программах (Вам же не в последний раз нужно считать n строк?).