Введите 10 строк, выведите самую большую.

Я новичок в java и у меня проблема с написанием кода. Проблема в том, что я беру 10 строк у пользователя и хочу напечатать самую большую из всех 10 строк. Раздел ввода работает хорошо, но есть ошибка IDE: «плохие операнды для двоичного оператора '>'» при использовании условия if . Код ниже..

import java.util.Scanner;
import java.io.InputStream;

public class Largest_String {


    public static void main(String[] args) {


         Scanner input=new Scanner(System.in);
         System.out.println("Please Enter The 10 Strings: ");
        for(int i=1; i<=10; i++){


            System.out.print(i+") ");
            String str=input.nextLine();

            String array[]=new String[10];



            for(int j=10; j>0; j++){

            if(array[i]>array[j]){

            System.out.println("The Largest String if"+ array[i]);
            }

            }
        }
    }
}

person Farhan    schedule 29.02.2012    source источник
comment
что вы имеете в виду под «самой большой строкой»? самый длинный? или сумма Ascii самая большая? или что?   -  person Kent    schedule 29.02.2012
comment
Кроме того, ваше индексирование с помощью ij) даст вам ArrayIndexOutOfBounds после того, как вы исправите j++ до j-- .   -  person Julian Fondren    schedule 29.02.2012


Ответы (6)


вот немного другой способ сделать это:

import java.util.Scanner;
import java.io.InputStream;

public class Largest_String {
    public static void main(String[] args) {
         Scanner input=new Scanner(System.in);
         System.out.println("Please Enter The 10 Strings: ");

         String longest = "";

         for(int i=0; i<10; i++){
            System.out.print("Enter String "+(i+1)+": ");
            String str=input.nextLine();
            if( str.length() > longest.length() )
            {
               longest = str;
            }
        }
        System.out.println("The Largest String is "+ longest);
     }
 }

комментарий: привыкайте делать циклы на основе 0

person mindandmedia    schedule 29.02.2012
comment
Не идеально вставлять код в вопрос с тегом домашнего задания, вы можете ответить с идеями. - person sgowd; 29.02.2012
comment
простите, впредь воздержусь - person mindandmedia; 29.02.2012
comment
Большое спасибо, сэр, я был близок к тому, чтобы это сделать, на самом деле я новичок и не знаю синтаксис java должным образом. Но вы, люди, помогли мне, и я сделал это. - person Farhan; 29.02.2012
comment
вы должны принять ответ как правильный. если ни один из них не является правильным, опубликуйте правильный вариант самостоятельно и примите его. удачи тебе! - person mindandmedia; 29.02.2012

array[i].length()>array[j].length()

вам нужно сравнить длину строки, а не саму строку.

person Jerome Cance    schedule 29.02.2012

Массивы, к которым применяется оператор '>', имеют тип String, поэтому это недопустимый оператор.

Если вы хотите подтвердить самую длинную строку (количество символов), вам следует выполнить сравнение длины строк следующим образом:

if(array[i].length() >array[j].length() ){
person rhinds    schedule 29.02.2012
comment
Большое спасибо, ребята, я сделал это. Я узнал от вас много нового и полезного. Спасибо всем еще раз. - person Farhan; 29.02.2012

Вы можете использовать length() отдельной строки в массиве. Это метод, который возвращает длину заданной строки в целочисленном типе. Вы используете оператор > для строк, используйте его для целых чисел, т.е. длины каждой строки.

person Sai Kalyan Kumar Akshinthala    schedule 29.02.2012

Вам нужно внимательно изучить вложение циклов. Это выглядит примерно так:

for (/* i */) {
    String array[] = new String[10];
    for (/* j */) {
        /* ... */
    }
}

Конечным результатом такого вложения является то, что вы создаете десять массивов, каждый из которых состоит из десяти элементов. Переместите массив за пределы внешнего цикла for и убедитесь, что знаете, почему.

Далее сосредоточьтесь на индексах цикла и на том, как вы используете их для индексации массивов:

for (int i = 1; i <= 10; i++) {
    String array[] = new String[10];
    for (int j = 10; j > 0; j++) {
        if (array[i] > array[j]) {
        }
    }
}

Массив, объявленный как new String[10], имеет допустимые индексы: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Вы получаете доступ к array[10] в этом цикле, который взорвется с исключением вне диапазона. (Вы также увеличиваете значение j++, но намереваетесь начать с конца массива и вести обратный отсчет. Упс.)

При переборе массива лучше всего придерживаться этой формулы:

for (int i = 0; i < array.length; i++)

Если вы хотите считать в обратном порядке, вы можете, но это сложнее:

for (int i = array.length - 1; i >= 0; i--)

(Опять же, от n-1 до 0 включительно.) Этот вопрос показывает две дополнительные формы, которые также работают для итерации в обратном направлении:

for (int i = array.length; --i >= 0; )
for (int i = array.length; i-- > 0; )

Хотя мне не нравятся циклы for, которые объединяют тест и итеративный шаг за один раз, я определенно могу уважать то, что оба они выполняют свою работу правильно и, вероятно, будут идиоматическими.

Итерация в обратном направлении встречается редко.

person sarnold    schedule 29.02.2012
comment
Великий сэр, за ваш добрый ответ. Мне очень приятно получать полезные знания из ваших золотых слов. Большое спасибо. - person Farhan; 29.02.2012

  1. Используйте array[i].length>array[j].length для сравнения длин строк.

  2. for(int j=10; j>0; j++): это даст вам IndexOutOfBoundsException, когда j больше, чем элементы в array

  3. Идея:

    1. read in user input
    2. проверьте, длиннее ли этот ввод, чем ранее введенное значение (используйте 0 в качестве начального значения)
person hage    schedule 29.02.2012