Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Поменять местами слова в предложении


Автор: arinka1220 24.12.2013, 04:07
Поменять местами  минимальное  и максимальное(по длине) слово в предложении.Посмотрите плиз что не так.
Код

package javaapplication40;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;



public class JavaApplication40 {

    public static void main(String[] args) {
   
        Set<String> set = new TreeSet<String>(new Comparator<String>() {
 
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });
 
        ArrayList<String> list = new ArrayList<>();
 
        Scanner scanner = new Scanner(System.in);
        System.out.println ("Введите строку: ");
        String word = null;
        while (!"".equals(word = scanner.nextLine())) {
            set.add(word);
            list.add(word);
        }
        String[] arr = set.toArray(new String[0]);
        String max = arr[arr.length - 1];
        String min = arr[0];
        int iMax = list.indexOf(max);
        int iMin = list.indexOf(min);
        list.set(iMax, min);
        list.set(iMin, max);
 
        StringBuilder stringBuilder = new StringBuilder();
        for (String string : list) {
            stringBuilder.append(string).append(" ");
        }
        System.out.println ("Полученная строка: ");
        System.out.println(stringBuilder.toString().trim());
    }
 
}
 

Автор: Stolzen 24.12.2013, 10:25
похоже, что у вас меняются местами первое и последнее слово

Автор: Magistrus 24.12.2013, 13:06
Неправильное понимание работы сканера nextLine()  возврашает строку, а не слово.

Код

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;

public class JavaApplication40
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите текст: ");
        while (scanner.hasNext())
        {
            String stringLine = scanner.nextLine(); 
            String[] words = stringLine.split(" ");
            TreeSet<String> set = new TreeSet<String>(new Comparator<String>()
                    {
                        @Override
                        public int compare(String o1, String o2)
                        {
                            return o1.length() - o2.length();
                        }
                    });

            List<String> list = new ArrayList<String>(words.length);
            for (String word: words)
            {
                set.add(word);
                list.add(word);
            }
            String max = set.last();
            String min = set.first();
            int iMax = list.indexOf(max);
            int iMin = list.indexOf(min);
            list.set(iMax, min);
            list.set(iMin, max);

            StringBuilder stringBuilder = new StringBuilder();
            for (String string : list)
            {
                stringBuilder.append(string).append(" ");
            }
            System.out.println("Полученная строка: ");
            System.out.println(stringBuilder.toString().trim());
        }
    }
}



Добавлено @ 13:18
Еще вот такой вариант без лишнего сета и компортара. 
Код

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class JavaApplication40
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите строку: ");
        while (scanner.hasNext())
        {
            String stringLine = scanner.nextLine();
            String[] words = stringLine.split(" ");
            int vMax = Integer.MIN_VALUE;
            int vMin = Integer.MAX_VALUE;
            int iMax = Integer.MIN_VALUE;
            int iMin = Integer.MAX_VALUE;
            List<String> list = new ArrayList<String>(words.length);
            for (int i = 0; i < words.length; i++)
            {
                String word = words[i];
                if (word.length() > vMax)
                {
                    iMax = i;
                    vMax = Math.max(vMax, word.length());
                }
                if (word.length() < vMin)
                {
                    iMin = i;
                    vMin = Math.min(vMin, word.length());
                }
                list.add(word);
            }
            String min = list.get(iMin);
            String max = list.get(iMax);

            list.set(iMax, min);
            list.set(iMin, max);

            StringBuilder stringBuilder = new StringBuilder();
            for (String string : list)
            {
                stringBuilder.append(string).append(" ");
            }
            System.out.println("Полученная строка: ");
            System.out.println(stringBuilder.toString().trim());
        }
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)