Member 13676546 Ответов: 2

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


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

public class check{
public static void main(String[] args){
String a = "abc d";
String b= "abcd fe";

System.out.println(compareString(a,b));

}

public static boolean compareString(String a, String b){
// here i try to declare array size i dont know if i can do it in this way ?
String c[]= new String [a.length];
String d[]= new String [b.length];
int i=0;
int j=0;
// here i try to split them and store each char in arrays
for ( i=0; i<=a.length;i++){
String c[i] =a.split[" "];
}
for (j=0;j<=b.length;b++){
String d [j]=b.split()[" "];
}

// here i tried to count matches and add them up plus counting the numer of words 
int matches=0;
int numberOfWords=0;
for (i=0;i<=c.length();i++){
for( j=0;j<=d.length;j++){
if (c[i]==d[j]){
matches++;
}
numberOfWords++;
}
}
// here is it correct to write it this way ? 
if (match/numberOfwords*100>0.9*100){
return true;
{ 
return fales;
}
}

}
}



// I tried to fix the errors but it gives another erros ..
2 errors found:
File: C:\Users\Acer\Desktop\check.java [line: 17]
Error: Syntax error on token "i", delete this token
File: C:\Users\Acer\Desktop\check.java [line: 20]
Error: Syntax error on token "j", delete this token






...

Напишите метод compare Strings (java), который принимает в качестве входных данных две строки и возвращает логическое значение, представляющее, делает ли ваша программа вывод о том, что эти две строки очень похожи друг на друга. Логический результат true указывает, что строки находятся очень близко друг к другу, а false указывает на обратное. Ваш метод должен определить, что это основано на следующем правиле:

Если по крайней мере 90% слов в первой строке появляются во второй строке и по крайней мере 90% слов во второй строке появляются в первой строке, ваш метод должен возвращать true. В противном случае ваш метод должен возвращать false. чувствительный к регистру,(привет!=привет)

Чтобы проверить ваш метод, как вы его пишете, мы можем написать основной метод, так что вызовите метод из основного метода на различных входах, а затем распечатайте результаты. Нигде в коде мы не должны использовать класс сканера.belwo-это то, что я пробовал :

Я попытался объявить строку [] и с помощью метода split сохранить chcars , а затем сравнить их, но я не знаю, как сравнить 90%, я сравнил весь arrys..

спасибо

Что я уже пробовал:

Цитата:
проверка общественного класса{
публичный статический пустота главный(строка[] аргументы){
Строка a = "abc d";
Строка b= "abcd fe";

Системы.из.код println(функции comparestring(а,б));

}

public static boolean compareString(строка a, строка b){
// здесь я пытаюсь объявить размер массива, но не знаю, смогу ли я сделать это таким образом ?
String c[]= новая строка [a.length];
String d[]= новая строка [b.длина];
int i=0;
int j=0;
// здесь я пытаюсь разделить их и сохранить каждый символ в массивах
для ( i=0; i<=a.length;i++){
Строка c[i] =a.split[" "];
}
для (j=0;j<=b.length;b++){
Строка d [j]=b.split()[" "];
}

// здесь я попытался сосчитать спички и сложить их вместе с подсчетом количества слов
int matches=0;
int numberOfWords=0;
for (i=0;i<=c.length();i++){
для( j=0;j<=d.length;j++){
если (c[i]==d[j]){
совпадения++;
}
numberOfWords++;
}
}
// вот правильно ли это писать именно так ?
if (match/numberOfwords*100>0.9*100){
вернуть true;
{
возвращение ложным;
}
}

}
}


// Я пытался исправить ошибки, но это дает еще одну ошибку ..
2 найденные ошибки:
Файл: C:\Users\Acer\Desktop\check-Да.java [строка: 17]
Ошибка: синтаксическая ошибка на маркере "i", удалите этот маркер
Файл: C:\Users\Acer\Desktop\check-Да.java [строка: 20]
Ошибка: синтаксическая ошибка на токене "j", удалите этот токен








import java.util.array;
public class check{
  public static void main(String[] args){
    String a = aaaaa aaa;
    String b= bbbbbbaa aa;
    
    Sysytem.out.println( compareString(a,b);
                        }
}
public sttaic boolean compareString(string a, String b){
  String c[]= new String [a.length];
  String d[]= new String [b.length];
  
  for ( i=0; i<=a.length;i++0){
    String c[i] =a.split[" "];
  }
  for (j=0;j<=b.length;b++){
    String d [j]=b.split([" "]);
  }
  
  if ( Arrays.equals(c,d);{
    return true;
  }
    else{
      return false;
    }

2 Ответов

Рейтинг:
2

OriginalGriff

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

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поставить точку останова на строке:
String d[]= new String [b.length];
и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Member 13676546

спасибо за объяснение , ниже я попытался его улучшить.

Рейтинг:
0

Patrice T

Быть программистом - это также вопрос тщательного чтения требований:

Цитата:
Если по крайней мере 90% слов в первой строке появляются во второй строке и по крайней мере 90% слов во второй строке появляются в первой строке, ваш метод должен возвращать true.

Цитата:
но я не знаю, как сравнивать 90%

Вы не сравниваете 90%, вы сравниваете каждое слово по одному и подсчитываете совпадения.
совпадения / количество слов-это ваш процент.


Member 13676546

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

проверка общественного класса{
публичный статический пустота главный(строка[] аргументы){
Строка a = "abc d";
Строка b= "abcd fe";

Системы.из.код println(функции comparestring(а,б));

}

public static boolean compareString(строка a, строка b){
// здесь я пытаюсь объявить размер массива, но не знаю, смогу ли я сделать это таким образом ?
String c[]= новая строка [a.length];
String d[]= новая строка [b.длина];
int i=0;
int j=0;
// здесь я пытаюсь разделить их и сохранить каждый символ в массивах
для ( i=0; i<=a.length;i++){
Строка c[i] =a.split[" "];
}
для (j=0;j<=b.length;b++){
Строка d [j]=b.split()[" "];
}

// здесь я попытался сосчитать спички и сложить их вместе с подсчетом количества слов
int matches=0;
int numberOfWords=0;
for (i=0;i<=c.length();i++){
для( j=0;j<=d.length;j++){
если (c[i]==d[j]){
совпадения++;
}
numberOfWords++;
}
}
// вот правильно ли это писать именно так ?
if (match/numberOfwords*100>0.9*100){
вернуть true;
{
возвращение ложным;
}
}

}
}


// Я пытался исправить ошибки, но это дает еще одну ошибку ..
2 найденные ошибки:
Файл: C:\Users\Acer\Desktop\check-Да.java [строка: 17]
Ошибка: синтаксическая ошибка на маркере "i", удалите этот маркер
Файл: C:\Users\Acer\Desktop\check-Да.java [строка: 20]
Ошибка: синтаксическая ошибка на токене "j", удалите этот токен

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 13676546

спасибо