К основному контенту

Строки. Java

продолжаю выкладывать задачи для универа.  структура все та же: первый класс содержит в себе первую задачу и main, а в нем вызовы всех остальных классов, в каждом классе отдельная задача.
последняя задача на ArrayList некорректно работает при попытке ввести НЕ цифру в значение температуры. ищу решение. 



import java.util.Scanner;

public class S1 {
private String string1;
private String string2;
public S1(String s1, String s2)
{
string1 = s1;
string2 = s2;
}
public String add()
{
String greeting;
greeting = string1.substring(1) + string2.substring(1);
return greeting;
}

public static void main(String[] args) {
S1 s = new S1("Hello", "World");
System.out.println (s.add()+"\n");
S2 s2 = new S2();
System.out.println (s2.part()+"\n");
S3 s3 = new S3();
System.out.println (s3.transfer()+"\n");
S4 s4 = new S4();
System.out.println (s4.dbl()+"\n");
S5 s5 = new S5();
s5.noRegular();
S6 s6 = new S6();
s6.delete();
S7 c2 = new S7();
c2.count();
S8 c3 = new S8();
c3.unstr();
//////////////////////////////////////////////////////
System.out.println ("Введите номер месяца"+"\n");
Scanner in = new Scanner(System.in);
int month = in.nextInt();
S9 c4 = new S9(month);
c4.setList();
}


}




/*
 * 2.      Задана строка с нечетным количеством символов. Создайте строку, состоящую из
 *  3-х символов, например: “Candy” -> “and”, “solving” -> “lvi”. 
 */
public class S2 {
private String string = "Sublimation";
public String part ()
{
String greeting;
greeting = string.substring(((string.length())-3)/2, (string.length())-4);
return greeting;
}

}



/*
 * 3.      Задана строка произвольного размера. Создайте из этой строки новую, в которой 2 последних символа исходной строки перенесены в начало.
 */
public class S3 {
private String string = "Sublimation";
public String transfer()
{
String greeting;
greeting = string.substring(string.length()-2) + string.substring(0, string.length()-2);
return greeting;
}

}



/*
 * 4. Из заданной строки составьте новую, в которой каждый исходный символ представлен двумя, например “Candy” -> “CCaannddyy”.
 */
public class S4 {
private String string = "Sublimation";
public String dbl()
{
String greeting = "";
for (int i = 0; i < string.length(); i++)
{
greeting = greeting + string.charAt(i) + string.charAt(i);
}
return greeting;
}

}




/*
 * 5. Найдите все вхождения строки "b*b" (* - любой символ) в заданной строке без использования регулярных выражений, например “bob is bab” -> 2 .
 */
public class S5 {
private String string = "bob is bab bab bab file bob";
public void noRegular()
{
int count = 0;
int begin = 0;
for (int i = 0; i < string.length(); i++)
{
if (string.charAt(i) == ' ')
{
if((string.charAt(begin) == 'b') && (string.charAt(begin+2) == 'b'))
count++;
begin = i+1;
}
}
if ((string.charAt(string.length()-1) == 'b') && (string.charAt(string.length()-3) == 'b') && (string.charAt(string.length()-4) == ' '))
count++;
System.out.println ("bob is bab bab bab file bob -> " + count + "\n");
}
}





/*
 * 6. Создайте подстроку из исходной строки, где в каждом слово, содержащем символ “*” удалены соседние левый и правый символы,
 * например “th*is is sum*mer” -> “ts is suer”. 
 */
public class S6 {
private String string = "th*is is sum*mer";

public void delete()
{
int count;
for (int i = 0; i<string.length(); i++)
{
if (string.charAt(i) == '*')
{
count = i;
string = string.substring(0, count-1) + string.substring(count+2);
}
}
System.out.println(string + "\n");
}
}





/*
 * 7.  В заданной строке подсчитайте количество слов, заканчивающихся на ‘a’ или ‘s’, без учета регистра символов.
 */
public class S7 {
private String string = "thiS is summer ola";
private int countA = 0;
private int countS = 0;
public void count()
{
string = string.toLowerCase();
for (int i = 0; i<string.length(); i++)
{
if(string.charAt(i) == ' ')
{
if (string.charAt(i-1) == 'a')
countA++;
if (string.charAt(i-1) == 's')
countS++;
}
}
if (string.charAt(string.length()-1) == 'a')
countA++;
if (string.charAt(string.length()-1) == 's')
countS++;
System.out.println("a = " + countA + "\n" + "s = " + countS + "\n");
}
}




/*
 * 8. Заданы две строки. Создайте новую строку, состоящую из первой строки, в которой удалены все вхождения второй строки.
 */
public class S8 {
private String string = "summer, thiS is summer ola";
private String unstring = "summer";
public void unstr()
{
System.out.println(string.replaceAll(unstring, ""));
}
}




/*
 * Реализовать программу учета среднесуточной температуры на протяжении месяца. 
 * Ввод данных реализовать с консоли. Вначале должен быть выведен запрос названия месяца, 
 * затем значений температуры для каждого числа. Количество дней в месяце программа должна 
 * определять автоматически.  Значения хранить в ArrayList. При вводе реализовать проверку 
 * корректности вводимых данных, если данные введены не корректно - запросить ввод повторно. 
 * После введения данных вывести среднемесячную температуру, 
 * дату когда была максимальная температура и минимальная с указанием ее значения.
 * 
 */
import java.util.*;
public class S9 {
private int day;

public S9 (int m)
{
    switch (m) {
         case 1:  day = 31;
                  break;
         case 2:  day = 28;
                  break;
         case 3:  day = 31;
                  break;
         case 4:  day = 30;
                  break;
         case 5:  day = 31;
                  break;
         case 6:  day = 30;
                  break;
         case 7:  day = 31;
                  break;
         case 8:  day = 31;
                  break;
         case 9:  day = 30;
                  break;
         case 10: day = 31;
                  break;
         case 11: day = 30;
                  break;
         case 12: day = 31;
                  break;
     }
}
public void setList()
{
ArrayList<Integer> list = new ArrayList<Integer>();
Scanner in  = new Scanner (System.in);
for (int i = 0; i<day; i++)
{
System.out.println("Введите температуру в цельсиях за " + (i+1) + " число" + "\n");
if(in.hasNextInt()) // возвращает истинну если с потока ввода можно считать целое число
list.add(in.nextInt()); // считывает целое число с потока ввода и сохраняем в переменную
      else 
      {
         System.out.println("Вы ввели не целое число либо не число, повторите попытку, введите число" + "\n");
       continue;
   }
}
int sum = 0;
for (int i = 0; i < list.size(); i++)
{
sum+=list.get(i);
}
double average = sum/list.size();
System.out.println("Среднемесячная температура: " + average + "\n");
int max = list.get(0);
int dayMax = 0;
int min = list.get(0);
int dayMin = 0;
for (int i = 1; i<list.size(); i++)
{
if (max < list.get(i))
{
max = list.get(i);
dayMax = i;
}
if (min > list.get(i))
{
min = list.get(i);
dayMin = i;
}
}
System.out.println("Наивысшая температура за месяц была " + (dayMax+1) + " числа и равнялась " + max + " градусам\n");
System.out.println("Наименьшая температура за месяц была " + (dayMin+1) + " числа и равнялась " + min + " градусам\n");
}
}

Комментарии

  1. Во втором задании я бы сделал так чтоб считала любую строку, например так:
    public static void main(String[] args) {
    String s = "solving";
    System.out.println(s.substring((s.length())/2-1, (s.length()/2+2)) );
    }

    ОтветитьУдалить
  2. 3 задание, попишу у вас если можно:
    public static void main(String[] args) {
    String s = "Proizvolnayastroka";
    System.out.println(s.substring(s.length()-2).concat(s.substring(0, s.length()-2)));
    }

    ОтветитьУдалить
  3. Решение проблемы с некорректным вводом температуры так и не найдено?

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Прата С. Решение задач 6 главы

На решение этих задач у меня ушло 2 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

Прата С. решение задач 5 главы

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

Прата С. Решение 3 и 4 главы

Повторюсь, взяла только интересные мне задания, т.е. с элементами того что поняла плохо/не встречала ранее. Сделала за сегодня. с удовольствием отмечаю что сдвиги  в положительную сторону  хотя-бы в стиле есть . в 4 главе ясно объяснено почему при вводе нескольких строк начинаются проблемы, и как этого избежать, подробно описана работа с входным потоком. Как работать со строками стиля Си и класса String, разница. для себя я сделала выводы что лучше всего, конечно-же класс string. намного меньше мороки. и метод ввода getline в обоих случаях. в задачах разница проиллюстрирована. и кстати, указатели больше не вызывают у меня ужаса и трепета. много нового узнала о видах структур. эта глава расставила все по местам в моей голове. правда, зачем в задачи на СР втиснута работа с массивом array - загадка. он ведь толком не объяснен, но понять его интуитивно можно, правда, зачем его использовать не зная тонкостей, как обычный массив с немного иным объявле...