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

Строки. 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. Решение проблемы с некорректным вводом температуры так и не найдено?

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

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

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

ВОПРОС К ЧИТАТЕЛЯМ

Уважаемые читатели моего блога и просто проходящие мимо! У меня появилась идея заняться созданием уроков по интересующим вас темам. Предпочтительно на C++, но не ограничиваясь ими, я хочу поделиться своими знаниями не только в виде готового кода но и подробными объяснениями что к чему. Прошу вас, если вы имеете идею и хотели бы разобраться в какой-то теме - отпишитесь в комментариях, что было бы вам интересно. Постараюсь помочь. 

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.