Приклад: обчислюється середнє арифметичне послідовності цілих значень, що вводяться з клавіатури.
import java.util.*;
class AvgNums {
public static void main(String args[]) {
Scanner conin = new Scanner(System.in);
int count = 0;
double sum = 0.0;
System.out.println("Vvedit cislo to average. Konec *");
// Read and sum numbers.
while(conin.hasNext()) {
if(conin.hasNextDouble()) {
sum += conin.nextDouble();
count++;
}
else {
String str = conin.next();
if(str.equals("*")) break;
else {
System.out.println("Data format error.");
return;
}
}
}
System.out.println("Average is " + sum / count);
}
}
числа зчитуються з клавіатури і підсумовуються до тих пір, поки користувач не введе рядок "*". Цей рядок припиняє введення і на екран виводиться середнє арифметичне введених чисел.
У програмі прочитуються числа, поки не виявлена лексема, яка не відповідає коректному значенню типу double. Коли це відбувається, програма перевіряє, чи не дорівнює ця лексема рядку "done". Якщо це так, програма завершується коректно. Інакше виводиться повідомлення про помилку.
Зверніть увагу на те, що числа читаються за допомогою виклику методу nextDouble(). Цей метод прочитує будь-яке число, яке може бути перетворене в тип double, включаючи цілі значення, такі як 2, і значення з плаваючою точкою, такі як 3.4. Таким чином, у числа, що прочитується методом nextDouble(), необов'язково має бути десяткова точка. Цей базовий принцип покладений в основу усіх методів next. Вони можуть знаходити відповідність і читати дані будь-якого формату, який здатний представляти дані необхідного типу.
Зверніть увагу на те, що числа читаються за допомогою виклику методу nextDouble(). Цей метод прочитує будь-яке число, яке може бути перетворене в тип double, включаючи цілі значення, такі як 2, і значення з плаваючою точкою, такі як 3.4. Таким чином, у числа, що прочитується методом nextDouble(), необов'язково має бути десяткова точка. Цей базовий принцип покладений в основу усіх методів next. Вони можуть знаходити відповідність і читати дані будь-якого формату, який здатний представляти дані необхідного типу.
Приємна особливість, властива класу Scanner, полягає в тому, що спосіб, вживаний для прочитування даних з одного джерела, використовується для читання і з іншого джерела.
Приклад. Застосування класу Scanner для розрахунку середнього арифметичного чисел, що прочитуються з файлу
import java.util.*;
import java.io.*;
class AvgFile {
public static void main(String args[])
throws IOException {
int count = 0;
double sum = 0.0;
double a;
// Write output to a file.
FileWriter fout = new FileWriter("test.txt");
fout.write("2 3,4 5 6 7,4 9,1 10,5 done");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin);
// Read and sum numbers.
while(src.hasNext()) {
if(src.hasNextDouble()) {
a=src.nextDouble();
sum += a;
count++;
System.out.println(count+" "+a+" "+sum);
}
else {
String str = src.next();
if(str.equals("done")) break;
else {
System.out.println("File format error.");
return;
}
}
}
fin.close();
System.out.println("Average is " + sum / count);
}
}
Можна використати клас Scanner для читання різних типів, навіть якщо порядок їх дотримання заздалегідь невідомий. У вас є можливість перевірити тип даних, доступних для читання, перед їх прочитуванням. Розглянемо програму:
import java.util.*;
import java.io.*;
class ScanMixed {
public static void main(String args[])
throws IOException {
int i;
double d;
boolean b;
String str;
// Write output to a file. Виводить ынформацыю у файл
FileWriter fout = new FileWriter("test.txt");
fout.write("Testing Scanner 10 12,2 one true two false");
fout.close();
FileReader fin = new FileReader("Test.txt");
Scanner src = new Scanner(fin);
// Read to end.
while(src.hasNext()) {
if(src.hasNextInt()) {
i = src.nextInt();
System.out.println("int: " + i);
}
else if(src.hasNextDouble()) {
d = src.nextDouble();
System.out.println("double: " + d);
}
else if(src.hasNextBoolean()) {
b = src.nextBoolean();
System.out.println("boolean: " + b);
}
else {
str = src.next();
System.out.println("String: " + str);
}
}
fin.close();
}
}
Результат:
String: Testing
String: Scanner
int: 10
double: 12.2
String: one
boolean: true
String: two
boolean: false
P/S. Одна проблема що даний метод із файла читає в дійсному числі "," а на екран виводить "." Якщо у файлі буде стояти "." то даний метод src.hasNextDouble() не визначає величину як Double()
Приклад посимвольного читання із файла (немає врахування кодіровки)
import java.util.*;
import java.io.*;
class prob {
public static void main(String args[])
throws IOException {
int count = 0;
double sum = 0.0;
double a;
// Write output to a file.
FileWriter fout = new FileWriter("test.txt");
fout.write("2 3,4 5 6 7,4 9,1 10,5 done");
fout.write("\n"); //перевод строки
fout.write("2 3,4 ");
fout.close();
FileReader fr = new FileReader(new File("test.txt"));
int ch;
while ((ch = fr.read()) != -1) {
System.out.print((char)ch);
// System.out.println(""+ch+" "+(char)ch);
}
}
}
Приклад роботи з файлом для визначення його властивостей:
import java.io.File;
class FileTest {
static void p(String s) { //процедура для виведення даних на екран
System.out.println(s);
}
public static void main(String args[]) {
// File fl = new File("/java/COP YRIGHT");
File fl = new File("a.java");
p("Iмя файла:" + fl .getName());
p("Шлях: " + fl.getPath());
p("Повний шлях:" + fl.getAbsolutePath());
p("Батьк?вський каталог:" + fl.getParent());
p("Файл "+ (fl.exists() ? "iснує" : "не iснує"));
p("Файл "+ (fl.canWrite() ? "можно записывать" : "нельзя записывать"));
p("Файл "+ (fl.canRead() ? "можно читать" : "нельзя читать"));
p("Директория? "+(fl.isDirectory() ? "да": " нет"));
p(fl.isFile() ? "обычный файл" : "не обычный файл");
p("Последняя модификация файла:" + fl. lastModified());
p("Размер файла:" + fl.length() + " Bytes");
}
}
Задача (вивід інформації у файл). Обчислити числа Фібоначі і записати їх в текстовий файл fib.txt
import java.io.*;
class DataPrWr{
public static void main (String args[]) throws IOException{
PrintWriter dos = new PrintWriter (
new FileWriter ("fib.txt")); //створюємо текстовий файл для виводу
long a = 1, b = 1, с = 1; //опис зм?нних a, b, c
for (int k = 0; k < 90; k++){ //цикл
System.out.print(b + " "); //вивід на екран
dos.println(k+1+" "+b); //вивід у файл (разом з номером)
a = b; //обчислення чисел Фібоначі
b = с; //тип long може обчислити 90 чисел
с = a + b;
}
dos.close(); // закриваємо файл
}
}
Потоки вводу-виводу
Приклад: програма записує у файл числа Фібоначі, а потім читає виводить файл і виводить його вміст на екран.(Великі букви мають значення)
import java.io.*;
class DataPrWr{
public static void main (String args[]) throws IOException{
DataOutputStream dos = new DataOutputStream(
new FileOutputStream("fib.txt"));
int a = 1, b = 1, с = 1;
for (int k = 0; k < 40; k++){
System.out.print(b + " ");
dos.writeInt(b);
a = b;
b = с;
с = a + b;
}
dos.close();
System.out.println("\n");
DataInputStream dis = new DataInputStream (
new FileInputStream("fib.txt"));
while(true)
try{
a = dis.readInt();
System.out.print(a + " ");
}
catch(IOException e){
dis.close();
System.out.println("End of file");
System.exit (0);
}
}
// Джерело: http://articles.org.ru/docum/java/gl18/gl18.php
}
Розв`язок мовою Java
Програма мовою Java, повинна містити один public класс. Цей клас повинен мати назву main і містити метод "
public static void main(String[] args)
". Крім того, програма может містити будь-яку кількість вкладених класів і глобальних не публічних класів.Приклад:
Приклад програми з використанням консолі для введення/виведення
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args) {//ім`я класа повинно бути main
Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
int a = in.nextInt();
int b = in.nextInt();
out.println(a + b);
out.flush();
}
}
Приклад програми з використанням файлів для введення/виведення
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] argv) throws IOException{
new Main().run();
}
PrintWriter pw;
Scanner sc;
public void run() throws IOException{
sc = new Scanner(new File("input.txt"));
int a=sc.nextInt();
pw = new PrintWriter(new File("output.txt"));
pw.println(a/10+" "+a%10);
pw.close();
}
}
Введення та виведення дійсних чисел:
Scanner in=new Scanner(System.in);
in.useLocale(new Locale("US")); // введення дійсного числа з крапкою а не комою
double x=in.nextDouble();
System.out.printf(Locale.US,"%.2f\n",a[i]); //форматоване виведення дійсних чисел з крапкою
Дуже корисні приклади! Дякуємо всією КН-19. Якби не Ви, наші б лаби б були б завалені:)
ВідповістиВидалитиВ них я и находил вдохновение для создания своего проекта.
ВідповістиВидалитиP.S. Та же группа.
P.P.S. Привет маме!