Cho e hỏi khi nào nên dùng hàm có return và không có return
5 месяцев назад
nếu 1 cái hàm, mà sau khi thực hiện, e không cần mang kết quả của nó đi tính toán, hoặc phục vụ các công việc khác thì không cần return Ví dụ : 1 cái hàm e chỉ cần tính tổng a +b và in kết quả, thì hàm này không cần return, mà chỉ cần in ra luôn kết quả 2. Nhưng nếu sau tính tổng, e lại muốn vác tổng này đi làm gì đó, thì e cần return, để có thể gán kết quả này vào 1 biến, rồi vác biến đó đi làm gì thì làm .
Dựa vào kiến thức a chỉ bảo , e tích hợp thêm được cái nhập vô hạn ạ /* * Viết chương trình nhập từ bán phím hai số a,b * Nhập 1 kí tự +,-,*,/ và thực hiện cái phép toán đó */ package Chuong6; import java.util.Scanner; public class bai6_01 { public static void main(String[] args){ System.out.print("Nhap hai so a va b: "); Scanner n = new Scanner(System.in); int a = n.nextInt(); int b = n.nextInt(); phep_tinh(a, b);
} public static void phep_tinh(int a, int b) { System.out.print("Nhap phep toan: "); Scanner Pt = new Scanner(System.in); String pt = Pt.nextLine(); while(true) { if (pt.equals("+")) { int total = a + b; System.out.println(" Tong cua hai so la: " + total); }else if (pt.equals("-")) { int hieu = a- b; System.out.println("Hieu 2 so la: " + hieu); }else if (pt.equals("*")) { int muti = a*b; System.out.println("Tich hai so: " + muti); }else if (pt.equals("/")) { if (b == 0) { System.out.println("Khong chia duoc cho zero"); }else { double thuong = (double)a /b; System.out.println("Thuong hai so: " + thuong); } } System.out.print("Ban co muon tiep tuc khong(Y/N): "); String comment = new Scanner(System.in).nextLine(); if (comment.equals("Y") || comment.equals("y")) { System.out.print(" Vui long nhap phep tinh: "); pt = Pt.nextLine(); }else if(comment.equals("N") || comment.equals("n")){ break; } } } }
public static void main(String[] args) { Scanner tt = new Scanner(System.in); System.out.println("Mời bạn nhập sô a"); double a = tt.nextDouble(); System.out.println("Mời bạn nhập sô b"); double b = tt.nextDouble(); System.out.println("Mời bạn nhập 1 trong các phép tính (+,-,*,/)"); String pheptinh = new Scanner(System.in).nextLine(); while (pheptinh.equals("/") && b==0){ System.out.println("Mời nhập lại b :"); b=tt.nextDouble(); } switch (pheptinh){ case "+": cong(a,b); break; case "-": tru(a,b); break; case "*": nhan(a,b); break; case "/": chia(a,b); break; default: System.out.println("nhap gi v thim"); break; } } public static void cong(double a , double b ){ double kq = a + b ; System.out.println(" a + b = "+kq); } public static void tru(double a , double b ){ double kq = a - b ; System.out.println(" a - b = "+kq); } public static void nhan(double a , double b ){ double kq = a * b ; System.out.println(" a * b = "+kq); } public static void chia(double a , double b ){ double kq = a / b ; System.out.println(" a / b = "+kq); }
Còn 1 cách ngắn gọn như thế này nữa -------------------------------------------------------------- import java.util.Scanner; // Chường trình nhập vào các phép tính để tính 2 số public class b6 { public static void main(String[] args) { Scanner sc= new Scanner(System.in); System.out.println("Nhập a= "); int a =new Scanner(System.in).nextInt(); System.out.println("Nhập b= "); int b =new Scanner(System.in).nextInt(); System.out.println("Nhập dấu (+,-,*,/) để thực hiện phép tính "); char c = new Scanner(System.in).next().charAt(0); int kq = tinhab(a,b,c); System.out.println("Kết quả của phép "+c+" là "+kq); } public static int tinhab(int a, int b, char c) { switch (c){ case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; } return 0; } }
Em có 1 câu hỏi là có phải trong thực tế thì mình dùng hàm public static void... nhiều hơn hàm public static int sum, double... phải không ạ. Em vẫn chưa rõ lắm về tác dụng của 2 hàm này mà theo em thì hàm public static void... dễ hơn thì phải. Mong anh giải đáp
Hi anh, anh dạy hay lắm, em có làm khác anh 1 tí, mong anh rep :D import java.util.Scanner; public class ontap { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("Mời nhập a:"); double a= sc.nextDouble(); System.out.println("Mời nhập b:"); double b= sc.nextDouble(); System.out.println("Mời nhập vào phép tính (+ ,- ,* ,/)"); String phepTinh=new Scanner(System.in).nextLine(); switch (phepTinh){ case "+" : System.out.println("Kết quả phép tính a+b= "+cong(a,b)); break; case "-" : System.out.println("Kết quả phép tính a-b= "+tru(a,b)); break; case "*" : System.out.println("Kết quả phép tính a*b= "+nhan(a,b)); break; case "/" : System.out.println("Kết quả phép tính a/b= "+chia(a,b)); break; default: System.out.println("Phím bấm không hợp lệ, mời nhập lại :"); break; } } public static double cong(double a, double b) { return a + b; } public static double tru(double a, double b) { return a - b; } public static double nhan(double a, double b) { return a * b; } public static double chia(double a, double b) { while (b==0){ System.out.println("Mời nhập lai b, b khác 0"); b=new Scanner(System.in).nextDouble(); } return a / b; } }
Cách giải của Thầy hay quá ạ, giúp hiểu sâu hơn về hàm. Em thì em làm theo cách gần giống với giải phương trình bậc 2, code gọn hơn ạ. Nhân tiện thầy cho em hỏi là trong phần định nghĩa hàm, muốn dùng try, catch thì làm thế nào ạ? em có làm thử nhưng chưa ra ạ, em làm thì chương trình vẫn chạy nhưng khi chia cho 0 thì báo là Infinity. import java.util.Scanner; public class lesson21_exercise { public static void main(String[] args) { System.out.println("Nhap vao so a: "); double a=new Scanner(System.in).nextDouble(); System.out.println("Nhap vao so b: "); double b=new Scanner(System.in).nextDouble(); System.out.println("Nhap vao phep toan +-*/: "); String pheptoan=new Scanner(System.in).nextLine(); String kq=ab(a, b,pheptoan); System.out.println(kq); } public static String ab(double a, double b, String pheptoan) { if (pheptoan.equals("+")) return "Cong: "+ (a+b); else if (pheptoan.equals("-")) return "Tru: "+ (a-b); else if (pheptoan.equals("*")) return "Nhan: "+ (a*b); else if (pheptoan.equals("/")) { try { double c=a/b; System.out.println(c); return "Chia: "+ c; } catch (Exception ex) { return "Khong chia duoc cho 0"; } } else { return "Nhap lai phep toan +-*/: "; } } }
anh ơi, em phát triển thêm phần "bạn có muốn thoát chương trình không", ban đầu code chạy đúng theo yêu cầu. Mà lúc sau thì khi hỏi "bạn có muốn thoát chương trình không" em bấm n hoặc 1 chữ nào khác với "y và Y" nó vẫn tự động out chương trình ạ. Mong anh giải đáp bug của em ạ. Em cảm ơn anh! import java.util.Scanner; public class b21_code_baitap19 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { System.out.println("Nhập a: "); double a = sc.nextDouble(); System.out.println("Nhập b: "); double b = sc.nextDouble(); System.out.println("Nhập phép tính (+,-,*,/): "); String choice = new Scanner(System.in).nextLine(); double kQua = math(a, b, choice); System.out.println("Kết quả: " + kQua); System.out.println("Bạn có muốn thoát chương trình không? (y/n)?"); String traLoi = new Scanner(System.in).nextLine(); if (traLoi.equals("y") || traLoi.equals("Y")) ; break; } } public static double math(double a, double b, String choice){ switch (choice){ case "+": return a+b; case "-": return a-b; case "*": return a*b; case "/": if (b!=0){ return a/b; } else System.out.println("Math Error"); default: return 0; } } }
Год назад+1
Hi e, a chưa test nhưng a thấy : if (traLoi.equals("y") || traLoi.equals("Y")) ; dòng này e thừa ; thì phải. break lúc này không nằm trong if . E kiểm tra thêm nhé
import java.util.Scanner; public class bai21_19 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Scanner sc1 = new Scanner(System.in); System.out.println("Moi nhap so a:"); double a= sc.nextDouble(); System.out.println("Moi nhap so b:"); double b= sc.nextDouble(); System.out.println("Moi nhap phep tinh (+,-,*,/):"); String pt = sc1.nextLine(); PhepTinh(pt,a,b); } public static void PhepTinh (String ch,double a,double b){ if(ch.equals("+")){ System.out.println("Ket qua = "+(a+b)); } else if(ch.equals("-")){ System.out.println("Ket qua = "+(a-b)); } else if(ch.equals("*")){ System.out.println("Ket qua = "+(a*b)); } else if(ch.equals("/")){ if (b==0) System.out.println("Khong chia cho 0"); else System.out.println("Ket qua = "+(a/b)); } else System.out.println("Chuong trinh khong co phep tinh nay"); } } em làm như v có được không ạ
Cho e hỏi khi nào nên dùng hàm có return và không có return
nếu 1 cái hàm, mà sau khi thực hiện, e không cần mang kết quả của nó đi tính toán, hoặc phục vụ các công việc khác thì không cần return
Ví dụ : 1 cái hàm e chỉ cần tính tổng a +b và in kết quả, thì hàm này không cần return, mà chỉ cần in ra luôn kết quả
2. Nhưng nếu sau tính tổng, e lại muốn vác tổng này đi làm gì đó, thì e cần return, để có thể gán kết quả này vào 1 biến, rồi vác biến đó đi làm gì thì làm .
Dựa vào kiến thức a chỉ bảo , e tích hợp thêm được cái nhập vô hạn ạ
/*
* Viết chương trình nhập từ bán phím hai số a,b
* Nhập 1 kí tự +,-,*,/ và thực hiện cái phép toán đó
*/
package Chuong6;
import java.util.Scanner;
public class bai6_01 {
public static void main(String[] args){
System.out.print("Nhap hai so a va b: ");
Scanner n = new Scanner(System.in);
int a = n.nextInt();
int b = n.nextInt();
phep_tinh(a, b);
}
public static void phep_tinh(int a, int b) {
System.out.print("Nhap phep toan: ");
Scanner Pt = new Scanner(System.in);
String pt = Pt.nextLine();
while(true) {
if (pt.equals("+")) {
int total = a + b;
System.out.println("
Tong cua hai so la: " + total);
}else if (pt.equals("-")) {
int hieu = a- b;
System.out.println("Hieu 2 so la: " + hieu);
}else if (pt.equals("*")) {
int muti = a*b;
System.out.println("Tich hai so: " + muti);
}else if (pt.equals("/")) {
if (b == 0) {
System.out.println("Khong chia duoc cho zero");
}else {
double thuong = (double)a /b;
System.out.println("Thuong hai so: " + thuong);
}
}
System.out.print("Ban co muon tiep tuc khong(Y/N): ");
String comment = new Scanner(System.in).nextLine();
if (comment.equals("Y") || comment.equals("y")) {
System.out.print("
Vui long nhap phep tinh: ");
pt = Pt.nextLine();
}else if(comment.equals("N") || comment.equals("n")){
break;
}
}
}
}
bài này nếu em dùng do while , ép cho b lớn hơn 0 ròi mới thực hiện phép tình thì ok hơn không ạ
public static void main(String[] args) {
Scanner tt = new Scanner(System.in);
System.out.println("Mời bạn nhập sô a");
double a = tt.nextDouble();
System.out.println("Mời bạn nhập sô b");
double b = tt.nextDouble();
System.out.println("Mời bạn nhập 1 trong các phép tính (+,-,*,/)");
String pheptinh = new Scanner(System.in).nextLine();
while (pheptinh.equals("/") && b==0){
System.out.println("Mời nhập lại b :");
b=tt.nextDouble();
}
switch (pheptinh){
case "+":
cong(a,b);
break;
case "-":
tru(a,b);
break;
case "*":
nhan(a,b);
break;
case "/":
chia(a,b);
break;
default:
System.out.println("nhap gi v thim");
break;
}
}
public static void cong(double a , double b ){
double kq = a + b ;
System.out.println(" a + b = "+kq);
}
public static void tru(double a , double b ){
double kq = a - b ;
System.out.println(" a - b = "+kq);
}
public static void nhan(double a , double b ){
double kq = a * b ;
System.out.println(" a * b = "+kq);
}
public static void chia(double a , double b ){
double kq = a / b ;
System.out.println(" a / b = "+kq);
}
bạn chung ý tưởng dứ tui nè , tham khảo nhaaa
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Moi nhap vao so a");
double a=sc.nextDouble();
System.out.println("Moi nhap vao so b");
double b=sc.nextDouble();
System.out.println("moi nhap vao dau + - * /");
char c =sc.next().charAt(0);
String kq=Match(c, a, b);
System.out.println("ket qua="+kq);
}
public static String Match(char c, double a, double b){
switch (c) {
case '+' -> {
return String.valueOf(a+b);
}
case '-' -> {
return String.valueOf(a-b);
}
case '*' -> {
return String.valueOf(a*b);
}
case '/' -> {
if (b!=0) {
return String.valueOf(a/b);
}
else return"phai nhap b khac 0";
}
default -> {
return "phep toan ko hop le";
}
}
Anh ơi để function con viết đằng trước hàm chính được k a
Còn 1 cách ngắn gọn như thế này nữa
--------------------------------------------------------------
import java.util.Scanner;
// Chường trình nhập vào các phép tính để tính 2 số
public class b6 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
System.out.println("Nhập a= ");
int a =new Scanner(System.in).nextInt();
System.out.println("Nhập b= ");
int b =new Scanner(System.in).nextInt();
System.out.println("Nhập dấu (+,-,*,/) để thực hiện phép tính ");
char c = new Scanner(System.in).next().charAt(0);
int kq = tinhab(a,b,c);
System.out.println("Kết quả của phép "+c+" là "+kq);
}
public static int tinhab(int a, int b, char c) {
switch (c){
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
return 0;
}
}
bạn ơi cho mình hỏi trường hợp nào minh sd dấu nháy đôii "_" và dấu nháy '_' sau case vậy bạn
Em có 1 câu hỏi là có phải trong thực tế thì mình dùng hàm public static void... nhiều hơn hàm public static int sum, double... phải không ạ. Em vẫn chưa rõ lắm về tác dụng của 2 hàm này mà theo em thì hàm public static void... dễ hơn thì phải. Mong anh giải đáp
Hi anh, anh dạy hay lắm, em có làm khác anh 1 tí, mong anh rep :D
import java.util.Scanner;
public class ontap {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("Mời nhập a:");
double a= sc.nextDouble();
System.out.println("Mời nhập b:");
double b= sc.nextDouble();
System.out.println("Mời nhập vào phép tính (+ ,- ,* ,/)");
String phepTinh=new Scanner(System.in).nextLine();
switch (phepTinh){
case "+" :
System.out.println("Kết quả phép tính a+b= "+cong(a,b));
break;
case "-" :
System.out.println("Kết quả phép tính a-b= "+tru(a,b));
break;
case "*" :
System.out.println("Kết quả phép tính a*b= "+nhan(a,b));
break;
case "/" :
System.out.println("Kết quả phép tính a/b= "+chia(a,b));
break;
default:
System.out.println("Phím bấm không hợp lệ, mời nhập lại :");
break;
}
}
public static double cong(double a, double b) {
return a + b;
}
public static double tru(double a, double b) {
return a - b;
}
public static double nhan(double a, double b) {
return a * b;
}
public static double chia(double a, double b) {
while (b==0){
System.out.println("Mời nhập lai b, b khác 0");
b=new Scanner(System.in).nextDouble();
}
return a / b;
}
}
import java.util.Scanner;
public class bai21_bt {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Moi nhap vao so a: ");
int a = sc.nextInt();
System.out.println("Moi nhap vao so b: ");
int b = sc.nextInt();
System.out.println("Moi nhap vao cac phep tinh + - * /");
Scanner scString = new Scanner(System.in);
String dau = scString.nextLine();
int kq = 0;
if(dau.equals("+")){
kq = a + b;
System.out.println("Ket qua: " + kq);
}else if (dau.equals("-")) {
kq = a - b;
System.out.println("Ket qua: " +kq);
}else if (dau.equals("*")) {
kq = a*b;
System.out.println("Ket qua: " +kq);
}else{
if(b == 0){
System.out.println("Khong chia duoc cho 0!");
}else{
kq=a/b;
System.out.println("Ket qua: "+kq);
}
}
}
}
Cách giải của Thầy hay quá ạ, giúp hiểu sâu hơn về hàm. Em thì em làm theo cách gần giống với giải phương trình bậc 2, code gọn hơn ạ. Nhân tiện thầy cho em hỏi là trong phần định nghĩa hàm, muốn dùng try, catch thì làm thế nào ạ? em có làm thử nhưng chưa ra ạ, em làm thì chương trình vẫn chạy nhưng khi chia cho 0 thì báo là Infinity.
import java.util.Scanner;
public class lesson21_exercise {
public static void main(String[] args) {
System.out.println("Nhap vao so a: ");
double a=new Scanner(System.in).nextDouble();
System.out.println("Nhap vao so b: ");
double b=new Scanner(System.in).nextDouble();
System.out.println("Nhap vao phep toan +-*/: ");
String pheptoan=new Scanner(System.in).nextLine();
String kq=ab(a, b,pheptoan);
System.out.println(kq);
}
public static String ab(double a, double b, String pheptoan) {
if (pheptoan.equals("+"))
return "Cong: "+ (a+b);
else if (pheptoan.equals("-"))
return "Tru: "+ (a-b);
else if (pheptoan.equals("*"))
return "Nhan: "+ (a*b);
else if (pheptoan.equals("/")) {
try {
double c=a/b;
System.out.println(c);
return "Chia: "+ c;
}
catch (Exception ex) {
return "Khong chia duoc cho 0";
}
}
else {
return "Nhap lai phep toan +-*/: ";
}
}
}
có 1 cách nữa để ko lỗi nhập từ bàn phím đó là:
System.out.println("mời chọn phép tính: + - * /");
sc.nextLine();
String phepTinh = sc.nextLine();
anh ơi, em phát triển thêm phần "bạn có muốn thoát chương trình không", ban đầu code chạy đúng theo yêu cầu. Mà lúc sau thì khi hỏi "bạn có muốn thoát chương trình không" em bấm n hoặc 1 chữ nào khác với "y và Y" nó vẫn tự động out chương trình ạ. Mong anh giải đáp bug của em ạ. Em cảm ơn anh!
import java.util.Scanner;
public class b21_code_baitap19 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("Nhập a: ");
double a = sc.nextDouble();
System.out.println("Nhập b: ");
double b = sc.nextDouble();
System.out.println("Nhập phép tính (+,-,*,/): ");
String choice = new Scanner(System.in).nextLine();
double kQua = math(a, b, choice);
System.out.println("Kết quả: " + kQua);
System.out.println("Bạn có muốn thoát chương trình không? (y/n)?");
String traLoi = new Scanner(System.in).nextLine();
if (traLoi.equals("y") || traLoi.equals("Y")) ;
break;
}
}
public static double math(double a, double b, String choice){
switch (choice){
case "+":
return a+b;
case "-":
return a-b;
case "*":
return a*b;
case "/":
if (b!=0){
return a/b;
}
else System.out.println("Math Error");
default:
return 0;
}
}
}
Hi e, a chưa test nhưng a thấy : if (traLoi.equals("y") || traLoi.equals("Y")) ; dòng này e thừa ; thì phải. break lúc này không nằm trong if . E kiểm tra thêm nhé
@ Dạ em debug thành công rồi ạ. Em cảm ơn anh
💯❤
import java.util.Scanner;
public class bai21_19 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Scanner sc1 = new Scanner(System.in);
System.out.println("Moi nhap so a:");
double a= sc.nextDouble();
System.out.println("Moi nhap so b:");
double b= sc.nextDouble();
System.out.println("Moi nhap phep tinh (+,-,*,/):");
String pt = sc1.nextLine();
PhepTinh(pt,a,b);
}
public static void PhepTinh (String ch,double a,double b){
if(ch.equals("+")){
System.out.println("Ket qua = "+(a+b));
}
else if(ch.equals("-")){
System.out.println("Ket qua = "+(a-b));
}
else if(ch.equals("*")){
System.out.println("Ket qua = "+(a*b));
}
else if(ch.equals("/")){
if (b==0)
System.out.println("Khong chia cho 0");
else
System.out.println("Ket qua = "+(a/b));
}
else
System.out.println("Chuong trinh khong co phep tinh nay");
}
}
em làm như v có được không ạ