Задачка

  • Автор темы Louis
  • Дата начала
L

Louis

Гость
#1
Условия задачи:

Ввести 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];
}
}
[codebox]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.length() >= max){
max = ArrayCreator.array.length();
nom=i;
}
}
}

static void setMin(){
for (int i=0; i<=ArrayCreator.array.length-1; i++){
if(ArrayCreator.array.length() <= min){
min=ArrayCreator.array.length();
nom1=i;
}
}
}

static int getMax(){
return max;
}
static int getNom(){
return nom;
}

static int getMin(){
return min;
}

static int getNom1(){
return nom1;
}

}[/codebox]

[codebox]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);
}

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]);

}

}[/codebox]

все работает задача решается!
Поскольку я только начал изучать Java меня интересуеть мнение более опытных программеров - Что не так.. Что можно было сделать лучше... (Создание классов, методов и пр.)
Очень нужна Ваша оценка.
 
Y

Yason

Гость
#2
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 строк?).