Java, вернуть 2 параметра, как?
1895 повідомлень
#15 років тому
Как сделать чтобы p и q - были выходящими параметрами, в яве плохо разбираюсь.public static void Frac1(int a, int b, int p, int q){
q=nod2(a, b);
if (q<0){
p=-1;
}
q=Math.abs(q);
}
3240 повідомлень
#15 років тому
Для примитивных типов и для строк — никак.По мнению создателей Java это считается плохим стилем программирования, поэтому такой возможности не предоставили.
1895 повідомлень
#15 років тому
Так не могу, привожу весь тест:package javaapplication1;
/*Лаб.12
Використовуючи функцію Nod2(A,B) з прикладу 46, описати процедуру “Frac1(a, b, p, q)”,
перетворюючи дріб a/b до нескоротного вигляду p/q (всі параметри процедури - цілого типу,
a і b – вхідні, p і q – вихідні). Знак результуючого дробу p/q приписується чисельнику (тобто q>0 ).
За допомогою Frac1 знайти нескоротні дроби, рівні
« a/b + 3/d, a/b + e/f, a/b + g/h» (числа a,b,3,d,e,f,g,h дано).
(приклад 46: описати функцію Nod2(A,B) цілого типу,що знаходить найбільший загальний
дільник (НЗД) двох цілих додатних чисел А і В, використовуючи алгоритм Евкліда :
НЗД (А,В) = НЗД (В,А mod B), якщо В не дорівнює нулю; НЗД (А; 0) = 0.)
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
// maximum diveder, Evklid algoritm
public static int nod2(int a, int b)
{
while(a!=0 && b!=0)
{
if(a>=b) a=a%b;
else b=b%a;
}
return a+b;
}
public static void Frac1(int a, int b, int p, int q){
q=nod2(a, b);
if (q<0){
p=-1;
}
q=Math.abs(q);
}
public static void main(String args) {
int a=0, b=0, d=0, e=0, f=0, g=0, h=0, p=0, q=0;
try {
BufferedReader is = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("\na = ? ");
//a = Integer.parseInt(is.readLine());
a=2;
System.out.println("\nb = ? ");
//b = Integer.parseInt(is.readLine());
b=10;
System.out.println("\nd = ? ");
//d = Integer.parseInt(is.readLine());
d=10;
System.out.println("\ne = ? ");
//e = Integer.parseInt(is.readLine());
e=5;
System.out.println("\nf = ? ");
//f = Integer.parseInt(is.readLine());
f=6;
System.out.println("\ng = ? ");
//g = Integer.parseInt(is.readLine());
g=8;
System.out.println("\nh = ? ");
//h = Integer.parseInt(is.readLine());
h=10;
// System.out.println("\np = ? ");
//p = Integer.parseInt(is.readLine());
// p=20;
// System.out.println("\nq = ? ");
//q = Integer.parseInt(is.readLine());
// q=4;
is.close();
Frac1(a, b, p, q);
//q=nod2(a, b);
System.out.println("\np = "+p+" - q = "+q);
} catch (Exception ex) {
System.out.println("\nError message: \n" + ex.getMessage() + "\n\n" + "Stack info:");
ex.printStackTrace();
}
}
}
3240 повідомлень
#15 років тому
Вообще за такие задания нужно руки отрывать, наверняка преподаватель тупо скопировал из старой методичке по Си.Но раз уж выбора нет, и нужно реализовать именно Frac1(a, b, p, q) с выходными параметрами p и q, то придется задавать их не как int, а как экземпляры какого-либо класса (например создайте класс с единственным полем типа int).
1895 повідомлень
#15 років тому
Цитата ("tvv"):Вообще за такие задания нужно руки отрывать, наверняка преподаватель тупо скопировал из старой методичке по Си.
Но раз уж выбора нет, и нужно реализовать именно Frac1(a, b, p, q) с выходными параметрами p и q, то придется задавать их не как int, а как экземпляры какого-либо класса (например создайте класс с единственным полем типа int).
задачки класные, интересные, я вот подруге помогаю, но это действительно какая то тупиковая)
на таких задачках удобно мозг тренировать)
3240 повідомлень
#15 років тому
Мозг лучше тренировать на нормальных, полезных задачах.Если хотите, я мог бы подкинуть парочку для обучения.
1895 повідомлень
3240 повідомлень
#15 років тому
1. Возьмите исходники последнего JDK, посмотрите на java.util.Arrays. Разберитесь, как там реализована сортировка. Она реализована не оптимально. Найдите способ, как можно ускорить сортировку минимум на 10% без больших расходов памяти. Хотя бы лишь на некоторых наборах и типах данных. Напишите свой класс с Вашими вариантами сортировки.2. Аналогично, посмотрите как реализован HashMap. Найдите любой способ, как можно ускорить его работу, хотя бы в некоторых частных случаях.
3. И так далее, можете брать реализацию любого алгоритма, какой нравится, и пытайтесь хотя бы на йоту его улучшить. Начать можете с того, что я перечислил выше.
Если получится хоть какой-то положительный результат, тогда оформите свой класс в виде отдельной либы, и можете выложить в опенсорс )
Полюбому будет польза, в отличии от туповатых лабораторных работ.